paymentQueueRestoreCompletedTransactionsFinished:返回具有空事务数组的队列

时间:2012-07-15 11:58:30

标签: ios ios5 in-app-purchase storekit

问题:我调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];并使用空事务数组返回给我的观察者paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueue。但我已经购买了非消费品应用内商品。

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

重现的简单步骤:

  1. 添加付款并完成购买。 queue return SKPaymentTransactionStatePurchased transaction,所以我在队列中启用了feature和finalize transaction。
  2. 删除有关购买的信息,以便我可以重新购买。 (想象一下,用户重新安装了应用程序,或者开始在其他设备上使用该应用程序)
  3. 尝试再次在应用内购买。收到“您已购买此产品。点击”确定“再次免费下载。”。所以我按下OK。并再次排队返回SKPaymentTransactionStatePurchased事务,因此我启用了功能并在队列中完成事务。
  4. 再次删除了有关购买的信息。 :)
  5. 尝试再次在应用内购买。收到“您已购买此应用程序内购买但尚未下载。”。只有一个OK按钮,甚至在您按下它之前,您将收到状态为SKPaymentTransactionStateFailed的交易。我敲定了它。但是当交易失败时我不会启用功能。
  6. 最后尝试使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];恢复已完成的交易。并返回观察者paymentQueueRestoreCompletedTransactionsFinished: SKPaymentQueue,其中包含空transactions数组。
  7. 我觉得苹果沙盒服务器现在已经破了,所以我无法正确恢复交易。或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您已在步骤3中完成购买,因此无需恢复购买IMHO。

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


我的回答是:

  在支付队列处理完所有可恢复交易后,将调用

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue。它只是告诉你恢复过程已经完成。

     

对于每次可恢复购买,系统都会调用- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions,您需要处理transaction transactionstransaction.transactionState的{​​{1}}中的每个SKPaymentTransactionStateRestored