【问题标题】:paymentQueueRestoreCompletedTransactionsFinished: return queue with empty transactions arraypaymentQueueRestoreCompletedTransactionsFinished:返回带有空交易数组的队列
【发布时间】:2012-07-15 11:58:30
【问题描述】:

问题:我调用 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 它返回给我的观察者 paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueue,但事务数组为空。但我在应用内购买了非消耗品

我正在测试我的应用如何恢复来自不同状态的购买。

重现的简单步骤:

  1. 添加付款并完成购买。队列返回SKPaymentTransactionStatePurchased 事务,因此应用启用功能并完成队列中的事务。
  2. 删除有关购买的信息,以便我重新购买。 (想象一下,用户重新安装了该应用,或开始在另一台设备上使用该应用)
  3. 再次尝试在应用内购买。收到“你已经购买了这个。点击 OK 再次免费下载。”。按 OK,队列返回 SKPaymentTransactionStatePurchased 事务,因此应用启用功能并完成队列中的事务。
  4. 再次删除有关购买的信息。
  5. 再次尝试在应用内购买。收到“您已经购买了此应用内购买,但尚未下载。”。只有一个 OK 按钮,甚至在您按下它之前,您就会收到状态为SKPaymentTransactionStateFailed 的交易。应用完成交易,但交易失败时不会启用功能。
  6. 最后尝试使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 恢复已完成的事务。它返回到观察者 paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueue 并带有空的 transactions 数组。

我觉得 Apple Sandbox 服务器出现问题,因此我无法正确恢复交易。还是我做错了什么?

【问题讨论】:

  • 你有没有试过用真机先删除旧应用?
  • 当然,我正在真实设备上进行测试。然后我重新安装了该应用程序,并创建了新的测试帐户以进行购买测试。
  • 你知道如何解决这个问题了吗?谢谢。

标签: ios ios5 in-app-purchase storekit


【解决方案1】:

由于您已在步骤 3 中完成购买,恕我直言,没有必要恢复该购买。

第 2 步和第 4 步与用户重新安装应用程序不同,因为应用程序已启动并正在运行,因此 SKPayment 可能会采取措施减少服务器负载。您最好尝试删除该应用并安装,然后立即使用restoreCompletedTransactions 恢复购买。


我的旧答案:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 在支付队列处理完所有可恢复交易后调用。它只是告诉您恢复过程已完成。

对于每个可恢复的购买,都会调用- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions,你需要处理transactions中的每个transaction,即transaction.transactionStateSKPaymentTransactionStateRestored

【讨论】:

  • 是的,我知道。我已经实现了'- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions',但在我恢复交易时它从未调用过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2023-02-21
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多