[英]In-app purchase iOS: Transaction State .purchased is not called in sandbox environment
我正在我的應用程序中實施 IAP。 當我在沙盒環境中進行交易時,會調用 transactionState.purchasing,然后應用程序會顯示付款成功,如下圖所示。 但是,不調用 transactionState.purchased。 我無法處理完成交易。
這是我的代碼:
class IAPHelper:NSObject {
// MARK: Variables
static let shared = IAPHelper()
private var productsRequest: SKProductsRequest?
private var productsRequestCompletionHandler: ProductsRequestCompletionHandler?
// MARK: Initialization
private override init() {
super.init()
SKPaymentQueue.default().add(self) //for SKPaymentTransactionObserver
clearPendingTransaction()
}
deinit {
SKPaymentQueue.default().remove(self)
}
// MARK: Functionalities
// The reason to implement and call this method here: https://stackoverflow.com/a/42790492/8120939
func clearPendingTransaction() {
for transaction in SKPaymentQueue.default().transactions {
SKPaymentQueue.default().finishTransaction(transaction)
}
}
func requestProducts(productIdentifiers: Set<ProductIdentifier>, _ completionHandler: @escaping ProductsRequestCompletionHandler) {
productsRequest?.cancel()
productsRequestCompletionHandler = completionHandler
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productsRequest!.delegate = self
productsRequest!.start()
}
public func buyProduct(_ product: SKProduct) {
print("Buying \(product.productIdentifier)...")
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
public func canMakePayments() -> Bool {
return SKPaymentQueue.canMakePayments()
}
static func restorePurchases() {
SKPaymentQueue.default().restoreCompletedTransactions()
}
}
使用 Singleton 設計模式即可解決
我在.purchased
、 .restored
和.failed
案例中使用queue.finishTransaction(transaction)
。 僅保存在.purchased
和。 restored
。 我想您只需要在.purchasing
和default
情況下break
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.