Как определить автоматическое продление подписки на iOS

У меня есть автоматически продлеваемая подписка. Также у меня есть следующий код для покупки:

SKProduct* productToPurchase = #create product logic#;
SKPayment* payment = [SKPayment paymentWithProduct:productToPurchase];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
[[SKPaymentQueue defaultQueue] addPayment:payment];

Итак, покупка оригинальной подписки — это нормально. После этого я закрываю свое приложение и жду в автономном режиме, пока не произойдет хотя бы один из периодов автоматического обновления. Я запускаю свое приложение, и я ожидаю, что получу обратный вызов о новой транзакции здесь:

- (void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray*)transactions

Но ничего не происходит. Я ничего не получаю об этом автономном автопродлении. Обратите внимание, что я также добавляю наблюдателя как можно скорее:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)options {
...
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
...
}

Итак, что здесь может быть не так? Или есть более правильные способы понять, продлилась ли подписка?

Большое спасибо! Серж


person Serge Manjukhin    schedule 10.03.2017    source источник
comment
хорошо, да, я пытался сделать это: auto refreshRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil]; [refreshRequest setDelegate:observer]; [refreshRequest start]; но это требует, чтобы пользователь вводил пароль для своего Apple ID при каждом запуске приложения, это плохо   -  person Serge Manjukhin    schedule 10.03.2017
comment
Кроме того, их документы говорят нам: После успешного продления подписки Store Kit добавляет транзакцию для продления в очередь транзакций. Ваше приложение проверяет очередь транзакций при запуске и обрабатывает обновление так же, как и любую другую транзакцию. Обратите внимание: если ваше приложение уже запущено на момент продления подписки, наблюдатель транзакций не вызывается; ваше приложение узнает о продлении при следующем запуске.   -  person Serge Manjukhin    schedule 10.03.2017
comment
в моем тестировании платеж за продление был доставлен в очередь платежей, когда я запускал приложение по истечении времени продления. Если вы явно обновите квитанцию, пользователю будет предложено войти в систему, но квитанция обновится автоматически, поэтому вы можете просто получить доступ к квитанции и содержать обновленную подписку.   -  person Paulw11    schedule 13.03.2017


Ответы (1)


Я столкнулся с той же проблемой, и, немного поигравшись, кажется, что иногда она работает случайным образом в песочнице. Я также нашел блог, где разработчик также имеет ту же проблему, но он утверждает, что это работает примерно в 1 из 3 раз для него в песочнице.

Так что, я думаю, это просто еще одна причуда песочницы, с которой вам/нам придется иметь дело.

person Mof    schedule 20.06.2017