此处的用例是用户从未购买过我的应用内购买,但点击了“恢复”按钮。我想让用户知道恢复失败了,因为没有什么可以恢复。
问题在于我没有得到任何事件。所以我不知道发生了什么。
当我的用户点击界面中的“恢复”按钮时,我会调用
SKPaymentQueue.default().restoreCompletedTransactions
然而,在那之后什么也没发生。我希望我的SKPaymentTransactionObserver paymentQueue(_:updatedTransactions:)
被调用,但它不是。
我尝试实施paymentQueue(_:restoreCompletedTransactionsFailedWithError:)
,但它也没有被调用。
答案 0 :(得分:3)
你真是太近了!您需要实现此SKPaymentTransactionObserver方法:
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
// ...
}
如果设备能够与App Store通信,则在restoreCompletedTransactions
之后调用该方法 - 无论恢复是否成功,因为用户确实有要恢复的购买,或者由于用户没有购买而失败恢复。
不幸的是,你在这里没有得到任何有关刚刚发生的事情的信息。我认为这是StoreKit架构中的一个缺陷。
但是,如果恢复成功,我们将使用paymentQueue(_:updatedTransactions:)
transactionState
通过.restored
。所以大概是你设置某种UserDefaults Bool(或类似的)来表明用户已经进行了这次购买。
嗯,在调用 paymentQueueRestoreCompletedTransactionsFinished
之前发生或发生。因此,在paymentQueueRestoreCompletedTransactionsFinished
中,您可以查看UserDefaults Bool是否已设置,如果不是,您可以猜测用户可能从未在第一时间进行任何购买,并做出相应的响应。
它的猜测,但它总比没有好。