2

任何人都知道如何使用 IAP 进行恢复选项。

我使用非消耗品购买。

我知道我必须实现这个委托方法:

- (void)restoreTransaction:(SKPaymentTransaction *)transaction
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

但我仍然无法弄清楚用一个进程调用这个方法。

我假设我需要在 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];调用回调方法之前调用此方法。

你能逐步解释它是如何工作的。

4

1 回答 1

4

你猜对了!您唯一需要调用的是:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

这将恢复用户已完成的所有事务。对于每笔交易,SKPaymentTransactionObserver都会调用此方法(每次用户购买时也会调用相同的方法):

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
        for (SKPaymentTransaction *transaction in transactions) {
            switch (transaction.transactionState) {
                case SKPaymentTransactionStatePurchased:
                    [self completeTransaction:transaction];
                    break;
                case SKPaymentTransactionStateFailed:
                    [self failedTransaction:transaction];
                    break;
                case SKPaymentTransactionStateRestored:
                    [self restoreTransaction:transaction];
                    break;              
                default:
                    break;
            }
        }

    }

使用 transactionState,如果需要,您可以区分交易是原始购买 ( SKPaymentTransactionStatePurchased) 还是恢复 ( SKPaymentTransactionStateRestored)。

如果您需要知道恢复何时完成,您可以使用:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
   NSLog(@"%d items restored", queue.transactions.count);
}
于 2012-07-09T15:43:57.227 回答