Восстановление просроченных автообновляемых подписок
Следуя инструкциям Apple, автоматически обновляемые подписки восстанавливаются -> устройство может отправлять restoreCompletedTransactions
на серверы Apple, и Apple ответит списком всех выполненных транзакций.
У меня вопрос: отправляет ли Apple все завершенные транзакции? (связано только с покупкой непотребляемых товаров и автообновляемых подписок, ofc)
Например: в моем приложении есть ежемесячная автоматически обновляемая подписка. Пользователь устанавливает мое приложение в январе 2012 года. В мае 2012 года он отключает автоматическое продление подписки. Через год, в январе 2013 года, он снова подписывается. В марте 2013 года он снова отключил автоматическое продление подписки. Наконец, в июне 2013 года он снова подписывается. В июле 2013 года он пытается использовать функцию "Восстановить покупки", какую информацию Apple отправит?
Какую информацию Apple отправит на это устройство? Будет ли Apple отправлять информацию обо всех подписках, даже о тех просроченных подписках?
PS Смысл вопроса - получить реальный опыт работы с автообновляемыми подписками и восстановления информации о них. Тестирование в песочнице иногда дает очень странные результаты.
Изменить: Хорошо, у меня было достаточно тестирования, чтобы сказать, что да, Apple отправляет все завершенные транзакции, включая транзакции, связанные с просроченной подпиской, даже если после нее была другая подписка.
2 ответа
"Store Kit предоставляет встроенную функциональность для восстановления транзакций для непотребляемых продуктов, автоматически обновляемых подписок и бесплатных подписок. Чтобы восстановить транзакции, ваше приложение вызывает метод restoreCompletedTransactions очереди платежей. Очередь платежей отправляет запрос в App Store на восстановление транзакции. В свою очередь, App Store генерирует новую транзакцию восстановления для каждой ранее завершенной транзакции. Свойство originalTransaction объекта транзакции восстановления содержит копию исходной транзакции. Ваше приложение обрабатывает транзакцию восстановления, извлекая исходную транзакцию и используя ее. разблокировать купленный контент. После того, как Store Kit восстановит все предыдущие транзакции, он уведомит наблюдателей очереди платежей, вызвав их paymentQueueRestoreCompletedTransactionsFinished: метод " - Apple Docs
Ну да, вы получите все покупки, связанные с этим идентификатором Apple (включая просроченные). Вы можете отфильтровать их в обратном вызове делегата и отправить только самый последний на ваши серверы.
- (void)handleRestoredTransaction:(SKPaymentTransaction *)transaction
{
NSLog(@"Somehow a transaction was restored.");
NSDate* receiptPurchaseDate = transaction.transactionDate;
NSDate* currentDate = [NSDate date];
NSTimeInterval daysPassedSincePurchase = [currentDate timeIntervalSinceDate: receiptPurchaseDate] / SECONDS_PER_DAY;
if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: monthlySubscriptionProductIdentifier])
{
if (daysPassedSincePurchase <= DAYS_PER_MONTH)
{
// send the transaction receipt to your servers.
[self handlePurchasedTransaction: transaction];
}
}
else if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: yearlySubscriptionProductIdentifier])
{
if (daysPassedSincePurchase <= DAYS_PER_YEAR)
{
[self handlePurchasedTransaction: transaction];
}
}
}