我正在恢复已完成的交易(重复)
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
在
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
我得到了应用恢复的历史交易列表,但是方法:
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
甚至没有被调用一次,所以我想知道我应该使用哪个?我做了一些研究,发现 updatedTransactions: 方法应该用于检查事务状态,但是如果我得到恢复的事务列表,将它们全部视为事务是没有意义的。我应该使用哪一个? paymentQueueRestoreCompletedTransactionsFinished 是否只给我最新的(即沙盒订阅在几分钟后到期,我在测试时在 updatedTransactions 中获得了完整的历史交易列表)。
最佳答案
有一个很棒的关于使用 StoreKit 的 WWDC 视频,它是 WWDC2012 Session 302。
要隔离每次购买,您的 updatedTransactions 方法可能如下所示:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
switch(transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
// Unlock content
//... Don't forget to call `finishTransaction`!
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStatePurchasing:
// Maybe show a progress bar?
break;
case SKPaymentTransactionStateFailed:
// Handle error
// You must call finishTransaction here too!
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
// This is the one you want ;)
// ...Re-unlock content...
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
}
}
一旦您确定购买正在恢复,您就可以根据需要提供内容 - 最好是从该 switch 语句中调用一个单独的方法并将交易作为参数传递。当然,实现取决于您。
关于ios - paymentQueueRestoreCompletedTransactionsFinished : vs updatedTransactions:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309427/