簡體   English   中英

應用內購買 iOS:交易 State.purchased 在沙盒環境中未調用

[英]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 我想您只需要在.purchasingdefault情況下break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM