Как справиться с ситуацией, если в рамках плана автоматического обновления в приложении приложение покупки закрылось / зависло после того, как яблоко выполнило свою часть транзакции, а делегат Storekit еще не вызван.
#pragma mark - SKPaymentTransactionObserver
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
[self handlePurchasingStateTransaction:transaction inQueue:queue];
break;
case SKPaymentTransactionStatePurchased:
[self handlePurchasedStateTransaction:transaction inQueue:queue];
break;
case SKPaymentTransactionStateFailed:
[self handleFailedStateTransaction:transaction inQueue:queue];
break;
case SKPaymentTransactionStateRestored:
[self handleRestoredStateTransaction:transaction inQueue:queue];
break;
case SKPaymentTransactionStateDeferred:
[self handleDeferredStateTransaction:transaction inQueue:queue];
break;
default:
break;
}
}
}
Наше приложение для iOS предоставляет подписки на основе автоматического продления. Когда пользователь приобретает какой-либо тарифный план, мы информируем наш сервер о зарегистрированном пользователе и его плане и предоставляем услуги на основе этого плана.
Мы проверяем квитанцию для идентификации учетной записи магазина приложений, наше приложение использует отношения один к одному с учетной записью пользователя нашего приложения (подписка по электронной почте) и учетной записи магазина приложений (идентифицируйте учетную запись по их исходному идентификатору транзакции в квитанции о покупке). ).
Если пользователь впервые покупает план, у нас нет исходного идентификатора транзакции.
Мы хотим идентифицировать этого платного пользователя и предоставлять услуги на основе плана.