При восстановлении транзакции существует два делегированных метода:
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
Первый ( paymentQueueRestoreCompletedTransactionsFinished ) вызывается при восстановлении всех транзакций. Если у вас нет предыдущей покупки, он также вызывает этот метод, потому что восстановленный работал нормально, но восстановить нечего.
Другой метод ( restoreCompletedTransactionsFailedWithError ) вызывается при ошибке восстановления транзакции.
Если вам нужно показать пользователю сообщение о том, что у него нет транзакции для восстановления, вы можете использовать:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Здесь у вас есть небольшой фрагмент для этого делегата:
//
// called when the transaction status is updated
//
- (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];
restoredTransaction++;
break;
default:
break;
}
}
}
Затем вы можете использовать переменную restoreTransaction , чтобы узнать, была ли восстановлена какая-либо транзакция в paymentQueueRestoreCompletedTransactionsFinished