Menambah Pembelian Dalam Aplikasi ke Projek Anda
Panduan ini akan menunjukkan cara menambahkan pembelian dalam aplikasi ke projek hyperPad yang dieksport. Sila semak semua keperluan di bawah sebelum meneruskan.
Keperluan
- Anda perlu mempunyai komputer Mac untuk mengeksport projek anda dan menambah pembelian dalam aplikasi ke projek yang dieksport.
- Anda perlu mempunyai cocoapods dipasang pada Mac. Jika anda tidak mempunyai cocoapods dipasang pada Mac anda, ikuti arahan di sini.
- Anda perlu mempunyai aplikasi Terminal dipasang pada Mac anda.
- Anda perlu mempunyai aplikasi editor teks dipasang pada Mac anda.
Prosedur
- Tambah pod 'SwiftyStoreKit' ke senarai pod dalam fail Podfile projek anda yang dieksport menggunakan editor teks.
- Di terminal, jalankan pod install. Ini mungkin mengambil masa, jadi bersabarlah!
- Gantikan kandungan HPSwift.swift dengan fail berikut
//
// HPSwift.swift
// hyperPad-Project
//
// Dicipta oleh Hamed Saadat pada 2019-08-07.
//
import Foundation
import SwiftyStoreKit
@objc class HPSwift: NSObject {
fileprivate var _behaviours: HPBehaviours? = nil
@objc var behaviours: HPBehaviours? {
get {
return _behaviours
}
set(behaviours) {_behaviours = behaviours
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
if purchase.needsFinishTransaction {
// Hantar kandungan dari pelayan, kemudian:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Buka kunci kandungan
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .failed, .purchasing, .deferred:
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
break // tidak melakukan apa-apa
@unknown default:
break
}
}
}
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
SwiftyStoreKit.restorePurchases(atomically: true) { results in
if results.restoreFailedPurchases.count > 0 {
behaviours?.broadcastValue("Restore Failed: \(results.restoreFailedPurchases)" as NSString, withKey: "purchaseError")
}
else if results.restoredPurchases.count > 0 {
results.restoredPurchases.forEach { (purchase) in
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
}
}
else {
print("Tiada yang Dipulihkan")
}
}
})
/*
Tambah fungsi Tingkah Laku di sini
*/
behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
// uruskan logik pembelian dalam aplikasi! //
SwiftyStoreKit.purchaseProduct("INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue", quantity: 1, atomically: true) { result in
switch result {
case .success(let purchase):
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
case .error(let error):
var message = ""
switch error.code {
case .unknown: message = "Ralat tidak diketahui. Sila hubungi sokongan"
case .clientInvalid: message = "Tidak dibenarkan untuk membuat pembayaran"
case .paymentCancelled: break
case .paymentInvalid: message = "Pengenal pembelian tidak sah"
case .paymentNotAllowed: message = "Peranti tidak dibenarkan untuk membuat pembayaran"
case .storeProductNotAvailable: message = "Produk tidak tersedia di kedai sekarang"
case .cloudServicePermissionDenied: message = "Akses kepada maklumat perkhidmatan awan tidak dibenarkan"
case .cloudServiceNetworkConnectionFailed: message = "Tidak dapat menyambung ke rangkaian"
case .cloudServiceRevoked: message = "Pengguna telah mencabut kebenaran untuk menggunakan perkhidmatan awan ini"
default: message = ((error as NSError).localizedDescription)
}
behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")
}
}
})
}
}
}
Perkara yang Perlu Diperhatikan
behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
// masukkan kod anda di sini
})
Ini akan dicetuskan apabila anda mengaktifkan tingkah laku siaran dengan kunci restorePurchases.
behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
Setelah pembelian selesai, ia akan mencetuskan tingkah laku mesej penerimaan dengan kunci purchaseComplete. INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue boleh digantikan dengan sama ada pengenalan pembelian anda dari AppStoreConnect ATAU parameter receiveValue. Jika anda menggunakan receiveValue, pastikan dalam tingkah laku siaran anda, anda menghantar pengenalan dari App Store Connect.

