调用SKPaymentQueue restoreCompletedTransactions,没有响应

时间:2017-11-14 02:33:52

标签: ios in-app-purchase

此处的用例是用户从未购买过我的应用内购买,但点击了“恢复”按钮。我想让用户知道恢复失败了,因为没有什么可以恢复。

问题在于我没有得到任何事件。所以我不知道发生了什么。

当我的用户点击界面中的“恢复”按钮时,我会调用

SKPaymentQueue.default().restoreCompletedTransactions

然而,在那之后什么也没发生。我希望我的SKPaymentTransactionObserver paymentQueue(_:updatedTransactions:)被调用,但它不是。

我尝试实施paymentQueue(_:restoreCompletedTransactionsFailedWithError:),但它也没有被调用。

1 个答案:

答案 0 :(得分:3)

你真是太近了!您需要实现此SKPaymentTransactionObserver方法:

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    // ...
}

如果设备能够与App Store通信,则在restoreCompletedTransactions之后调用该方法 - 无论恢复是否成功,因为用户确实有要恢复的购买,或者由于用户没有购买而失败恢复。

不幸的是,你在这里没有得到任何有关刚刚发生的事情的信息。我认为这是StoreKit架构中的一个缺陷。

但是,如果恢复成功,我们将使用paymentQueue(_:updatedTransactions:) transactionState通过.restored。所以大概是你设置某种UserDefaults Bool(或类似的)来表明用户已经进行了这次购买。

嗯,在调用 paymentQueueRestoreCompletedTransactionsFinished之前发生或发生。因此,在paymentQueueRestoreCompletedTransactionsFinished中,您可以查看UserDefaults Bool是否已设置,如果不是,您可以猜测用户可能从未在第一时间进行任何购买,并做出相应的响应。

它的猜测,但它总比没有好。