4

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

我正在测试我的应用程序如何恢复来自不同州的购买。

重现的简单步骤:

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

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

4

1 回答 1

2

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

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


我的旧答案:

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

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

于 2012-07-26T09:01:22.530 回答