ios – paymentQueueRestoreCompletedTransactionsFinished:vs updatedTransactions:

前端之家收集整理的这篇文章主要介绍了ios – paymentQueueRestoreCompletedTransactionsFinished:vs updatedTransactions:前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在恢复已完成的交易(重复)
  1. [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

并在

  1. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

我得到了一个由应用程序恢复的历史记录事务列表,但方法是:

  1. - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

甚至没有被召唤一次,所以我想知道我应该使用哪一个?我做了一些研究,发现updatedTransactions:方法应该用于检查事务状态,但是如果我得到了一个恢复的事务列表,那么将它们全部视为事务就没有意义了.我应该使用哪一个? paymentQueueRestoreCompletedTransactionsFinished是否只给我最新的一个(即沙盒订阅在几分钟后到期,我在updatedTransactions中获得了测试时所做的历史事务的完整列表).

解决方法

有一个关于使用StoreKit的优秀WWDC视频,它是WWDC2012 Session 302.

要隔离每次购买,您的updatedTransactions方法可能如下所示:

  1. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
  2.  
  3. for (SKPaymentTransaction *transaction in transactions) {
  4.  
  5. switch(transaction.transactionState) {
  6. case SKPaymentTransactionStatePurchased:
  7. // Unlock content
  8. //... Don't forget to call `finishTransaction`!
  9. [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  10. break;
  11. case SKPaymentTransactionStatePurchasing:
  12. // Maybe show a progress bar?
  13. break;
  14. case SKPaymentTransactionStateFailed:
  15. // Handle error
  16. // You must call finishTransaction here too!
  17. [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  18. break;
  19. case SKPaymentTransactionStateRestored:
  20. // This is the one you want ;)
  21. // ...Re-unlock content...
  22. [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  23. break;
  24. }
  25. }
  26. }

一旦确定正在恢复购买,您可以根据需要提供内容 – 最好通过从该switch语句中调用单独的方法并将事务作为参数传递.当然,实施取决于您.

猜你在找的iOS相关文章