Обработка ожидающих транзакций покупки в приложении при следующем запуске - PullRequest
1 голос
/ 29 апреля 2011

Как позвонить

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

если до получения обновленного ответа транзакции

SKPaymentTransactionStatePurchased

и после фактического списания денег на учетную запись пользователя itunes, приложение будет убито из-за входящего звонка или чего-то еще.

В противном случае вы не сможете разблокировать функцию при повторном запуске, а попытка повторной покупки выдаст ошибку «Вы уже приобрели это, но оно не было загружено», поскольку вы не завершили транзакцию и не смогли разблокировать функциональность, потому что приложение было убито. Но в этот момент деньги были списаны с учетной записи пользователя itunes. Все произошло после фактического списания денег и до того, как вы получили ответ SKPaymentTransactionStatePurchased. В промежутке приложение было убито. Что теперь делать в таких условиях?

1 Ответ

0 голосов
/ 29 апреля 2011

Очередь транзакций остается активной до тех пор, пока вы ее не завершите - даже если приложение будет убито - просто убедитесь, что вы продолжаете наблюдать очередь при следующем запуске.

Обратите внимание, что даже если несколько транзакций были поставлены в очередь, выих можно различить, потому что paymentQueue: updatedTransactions: предоставляет массив с каждой транзакцией, и вы можете запросить их состояние по отдельности.Пример:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
  for (SKPaymentTransaction *transaction in transactions)
  {
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchasing:
            // Purchasing... waiting...
            break;

        case SKPaymentTransactionStatePurchased:
            // Complete transaction here
            break;

        case SKPaymentTransactionStateFailed:
            // Handle failure and finish transaction here
            break;

        case SKPaymentTransactionStateRestored:
            // Restore transaction
            break;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...