【发布时间】:2018-05-16 21:42:22
【问题描述】:
**编辑:我已将原因缩小到购买了 Apple 托管内容。非托管内容的常规购买会正确恢复。
我似乎无法在我的应用上恢复购买。购买工作完全正常。但是,当我使用调用的函数时:
SKPaymentQueue.default().restoreCompletedTransactions()
支付队列永远不会被调用
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
//Not called!
}
paymentQueue对于常规购买没有问题。
看起来恢复正常完成,因为在运行上述 .restoredCompletedTransactions 后,我立即调用了此函数。
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print ("This works")
}
我还检查了以下内容,没有错误:
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error)
SKPaymentQueue.add(self) 在restoredCompletedTransactions 之前被调用,所以这也不应该是一个问题。
什么可能导致 IAP 工作正常,但不能恢复?我正在使用物理设备并使用沙盒帐户对其进行测试。
这个recent question had a similar problem,但从未得到答案。另外,我不确定这是否重要,但购买使用的是 Apple 托管内容。
任何帮助将不胜感激!这里简直要死我了。
【问题讨论】:
-
我认为
paymentQueueRestoreCompletedTransactionsFinished(_:)是正确的回调。听起来恢复工作正常。也许您只需要重新验证收据? -
该回调是让您知道恢复过程已完成的正确方法,但即使没有要恢复的购买也会调用该方法。
-
@Paulw11 好吧,这对那个方法很有意义。那么是什么导致它说没有购买可以恢复(如果我尝试重新购买一个项目,我会收到“你已经购买了这个”消息),为什么它不调用 Payment Queue 方法应该喜欢吗?
-
@picciano 但它不应该在我需要重新验证收据之前运行支付队列更新交易吗?
标签: ios swift in-app-purchase