Ios InApp покупает: Когда и почему SKPaymentTransactionStateRestored отправляется обратно как статус транзакции?

iOS Покупки In-App: Когда и почему SKPaymentTransactionStateRestored отправляется обратно как статус транзакции?

Связано ли это с повторяющимся планом подписки?

Ответ 1

Вы получаете транзакции SKPaymentTransactionStateRestored вместо транзакций SKPaymentTransactionStatePurchased при восстановлении покупок пользователей, отправив сообщение restoreCompletedTransactions в SKPaymentQueue.

Ответ 2

Общее правило - обрабатывать оба обратных вызова: для покупки и покупки восстановления.

- (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];

        default:
            break;
        }
    }
}

- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
[self recordTransaction: transaction content:transaction.payment.productIdentifier];

[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
[self recordTransaction: transaction content:transaction.originalTransaction.payment.productIdentifier];

[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}