Swift:恢复应用内购买,没有调用失败案例

Swift: Restore In-App purchase, no fail case called

我可以毫不费力地购买和恢复非消耗品。

但是如果我尝试从从未购买过该产品的帐户恢复,则永远不会调用方法 productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse),而在成功恢复时会调用它。

这是我在 class 中符合 SKPaymentTransactionObserver 协议的代码:

public func restorePurchases() {
    print("restoring...")
    SKPaymentQueue.default().add(self)
    SKPaymentQueue.default().restoreCompletedTransactions()
}

public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {

        // finishtTransaction() is called within the sub functions

        switch (transaction.transactionState) {
        case .purchased:
            print("pruchased !")
            complete(transaction: transaction)
            break
        case .failed:
            print("failed !")
            fail(transaction: transaction)
            break
        case .restored:
            print("restored !")
            restore(transaction: transaction)
            break
        case .deferred:
            print("deferred !")
            break
        case .purchasing:
            print("purchasing !")
            break
        default:
            print("default...")
            break
        }
    }
}

请注意,我可以购买和恢复产品,只是在没有任何可恢复的情况下我永远不会收到回复。

其实你只需要实现下面的方法:

public func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    if (queue.transactions.count == 0)
    {
        print("Nothing to restore...")
    }
}