【问题标题】:Restore Transactions is Not Calling Payment Queue恢复交易不调用支付队列
【发布时间】: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


【解决方案1】:

所以我有点想通了。

我从 iTunes Connect 中删除了所有应用内购买,并重新创建了它们(使用托管内容),它解决了问题。

我认为问题可能在于我在创建应用内购买后的某个时间点更改了捆绑标识符。虽然我已将产品的 ID 和代码调整为新的捆绑标识符,但我想知道这些原始购买历史是否正在尝试恢复,并且由于这些原始购买使用旧的捆绑标识符,它们不会加载为交易。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2012-06-23
    • 2021-08-01
    • 2014-06-13
    • 2013-10-28
    • 2023-02-03
    相关资源
    最近更新 更多