应用内购买iOS。在沙盒环境下,交易状态.purchated不被调用。

问题描述 投票:0回答:1

我正在我的应用程序中实现IAP。当我在沙盒环境下进行交易时,transactionState .purchasing被调用,然后应用程序显示我成功付款,如下图所示。然而,transactionState .purchasing并没有被调用,我无法处理完成交易。我无法处理完成交易。

下面是我的代码。

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()
}

}

enter image description here

ios swift in-app-purchase
1个回答
1
投票

使用Singleton设计模式就可以解决


-1
投票

我用的是 queue.finishTransaction(transaction).purchased, .restored.failed 的情况下。仅在以下情况下保存 .purchased 和.restored. 我想你需要 break 只在 .purchasingdefault 的案件。

© www.soinside.com 2019 - 2024. All rights reserved.