2015-05-27 2 views
6

Я хочу знать, когда и когда квитанция приложения автоматически обновляется, когда автоматически обновляется подписка на автообслуживание IAP. Документация предполагает, что получение приложения обновляется при совершении покупки (обновление?), Но я не вижу, это поведение в IAP песочнице:Подписка на автоматическое продление подписки и получение приложения

Информация о продукции и не обновление подписки добавляется к квитанцию, когда они оплачиваются и остаются в квитанции , пока вы не закончите транзакцию. После того, как вы закончите транзакцию , эта информация будет удалена при следующем обновлении квитанции , например, в следующий раз, когда пользователь совершит покупку.

Информация о всех других видах покупок добавляется к квитанции , когда они оплачиваются и остаются в квитанции на неопределенный срок.

Кроме того, государство документы:

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

Для меня это означает, что я могу контролировать SKPaymentQueue для завершенных транзакций, а затем проверить квитанцию ​​приложения, чтобы найти их запись. Но я не вижу это на практике в песочнице IAP. В песочнице IAP у меня есть подписка на автоматическое продление, которая автоматически обновляется (6 раз на пользователя/покупка, обычная песочница) , но чтобы открыть обновление, мне нужно вручную обновить квитанцию ​​приложения.

Предполагая, что все это работает так, как я ожидаю, существуют ли лучшие методы тестирования в изолированной среде IAP, чтобы вызвать это поведение?

+0

Вы непосредственно проверяете получение или полагаетесь на сторонний (непрозрачный) код? У меня есть несколько приложений с автоматическим обновлением и не имеют проблем с элементами, отображаемыми в квитанции. Конечно, я проверяю квитанцию ​​при каждом запуске приложения ... –

+0

Я расшифровываю клиентскую часть квитанции, используя RMStore и проверяя ее на стороне сервера с Apple. Это все работает. – TomSwift

+0

Хорошо, круто. Я не знаю подробностей RMStore; вы просматриваете весь список записей или делает это для вас? У вас должна быть подписка для каждого продления. –

ответ

4

В качестве примечания, документация противоречива по видам закупок и их настойчивости в получении - см my answer to this question.

Расписки является обновленной на серверной стороне, когда автовозобновление вхолостую - вы можете подтвердить это, проверив при вызове метод серверной стороны validateReceipt.

ОБНОВЛЕНИЕ: увидев, что вы используете RMStore, я издевался над чем-то, чтобы я мог посмотреть на поведение.

Мне кажется, что клиентская квитанция обновляется. Мой сценарий: подписка на месяц в месяц (так что 5 минут обновления в песочнице). Я положил некоторые диагностический код в viewDidLoad:

RMAppReceipt *receipt = [RMAppReceipt bundleReceipt]; 
if (receipt != nil) { 
    NSDateFormatter* localDateTime = [[NSDateFormatter alloc] init]; 
    [localDateTime setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]]; 
    [localDateTime setDateFormat:@"yyyy.MM.dd HH:mm:ss zzz"]; 

    for (RMAppReceiptIAP* purchase in receipt.inAppPurchases) { 
     NSString* cancellationDate = nil; 
     if (purchase.cancellationDate) { 
      cancellationDate = [localDateTime stringFromDate:purchase.cancellationDate]; 
     } 
     NSLog(@"Transaction: %@: product %@, original purchase date: %@, expiration date: %@, cancellation date: %@", 
       purchase.originalTransactionIdentifier, 
       purchase.productIdentifier, 
       [localDateTime stringFromDate:purchase.originalPurchaseDate], 
       [localDateTime stringFromDate:purchase.subscriptionExpirationDate], 
       cancellationDate); 
    } 

Я также поставил точку останова в RMStore-х paymentQueue:updatedTransactions: чтобы увидеть, если очередь обновляется с последующими AR покупок.

Затем я купил один месяц моего тестового продукта, проверил транзакцию и затем покинул приложение.

При последующих повторных вызовах приложения с интервалом в 5 минут я увидел точку останова в методе SKPaymentTransactionObserver, поразив транзакциюSate SKPaymentTransactionStatePurchased. Журнал показал последовательные добавления покупок (только последняя версия):

2015-05-27 14:27:32.828 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:02:59 GMT-7, expiration date: 2015.05.27 14:07:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.350 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:06:02 GMT-7, expiration date: 2015.05.27 14:12:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.774 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:11:07 GMT-7, expiration date: 2015.05.27 14:17:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.174 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:16:00 GMT-7, expiration date: 2015.05.27 14:22:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.637 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:21:04 GMT-7, expiration date: 2015.05.27 14:27:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:35.069 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:26:15 GMT-7, expiration date: 2015.05.27 14:32:58 GMT-7, cancellation date: (null) 

Можете ли вы воспроизвести этот диагностический подход?

+0

Я понимаю, что квитанция обновляется на стороне сервера - если я вручную обновляю квитанцию ​​(запрашивает пользователя), она также обновляется в приложении. Я хочу знать, будет ли квитанция пакета приложений обновляться при автоматическом обновлении (как это происходит при первой покупке). Что касается мониторинга завершенных транзакций, это через addTransactionObserver: по умолчанию SKPaymentQueue. Вызов restoreCompletedTransactions или refreshReceipt должен выполняться только в ответ на ввод пользователя - чего я хочу избежать. – TomSwift

+0

Спасибо за все усилия - я очень ценю это. Низкий, и вот, он начал работать и на меня. Я не знаю, следует ли мне помечать это до песочницы гремлины или гремлины на моем конце - я был довольно устал вчера вечером, когда он не работал. – TomSwift

Смежные вопросы