Отправляют ли автоматически продлеваемые подписки транзакцию SKPaymentTransactionStatePurchased при автоматическом продлении?

Отправляет ли AppStore транзакцию при автоматическом продлении подписки с автоматическим продлением? Если да, то может ли приложение надежно обнаружить его при следующей загрузке приложения, если оно установит себя в качестве наблюдателя:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

Будет ли новая автоматически продлеваемая транзакция вызывать:

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

с transaction.transactionState==SKPaymentTransactionStatePurchased?

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

 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

Спасибо...


person Peter Kramer    schedule 22.03.2011    source источник


Ответы (1)


После некоторых исследований я могу ответить на свой вопрос и поднять другую связанную с этим проблему. App Store вызывает paymentQueue и отправляет транзакцию. Транзакция публикуется с transaction.transactionState==SKPaymentTransactionStateRestored, а не с transaction.transactionState==SKPaymentTransactionStatePurchased.

Проблема в том, что, к сожалению, это публикуется только на одном устройстве. Второе устройство проводку не получает. Поэтому, чтобы обнаружить автопродление, а точнее обнаружить отсутствие автопродления и отказать устройству в продолжении подписки, нужно выполнить restoreCompletedTransaction или «http опубликовать 64-битный закодированный JSON, содержащий последнюю транзакцию». В первом случае пользователь должен указать свой пароль; это навязчиво. Если последнее, требуется много дополнительного кодирования. Итак, мой вопрос: почему в StoreKit нет команды:

(не существует) - [[SKPaymentQueue defaultQueue] restoreAttachedTransactions:(NSArray *)транзакции];

Эта команда будет выполняться точно так же, как restoreCompletedtRansactions, но она будет восстанавливать только прикрепленные транзакции и, что наиболее важно, не потребует от пользователя входа в систему. Он имеет ту же защиту безопасности, что и «http-публикация 64-битного закодированного JSON, содержащего последнюю транзакцию», и позволяет выполнять весь процесс покупки в приложении в StoreKit, а не требовать кода веб-публикации.

Если это имеет для вас смысл, предложите, как передать это в Apple.... спасибо.

person Peter B. Kramer    schedule 09.04.2011
comment
Во-первых, спасибо, что разъяснили мне это. Искал где-то полчаса. Почему это так плохо (вовсе нет) задокументировано Apple?! Может быть, это где-то, но не в Системном руководстве по автообновляемым подпискам, что было бы для меня логичным местом?!? - person Rich; 08.12.2011
comment
Во-вторых, я понимаю вашу точку зрения, но, может быть, в вашем мышлении есть изъян? На втором устройстве, откуда вы собираетесь получать аргументы транзакций, чтобы отправить их на свой API желаний? Без вызова paymentQueue в первую очередь вы еще не знаете, что такое новые транзакции. Ваше предложение (я так думаю?) было бы в лучшем случае полезно для восстановления только подмножества предыдущих известных покупок. Но даже в этом случае разумно ожидать, что пользователю придется вводить свой пароль. Нет? - person Rich; 08.12.2011
comment
То, как мы это делаем (по крайней мере, до сих пор для покупок расходных материалов), заключается в том, чтобы предложить пользователю возможность (очень важно - необязательно!) зарегистрироваться на нашем веб-сайте. Таким образом, на втором устройстве мы уже будем знать, что подписка была продлена, и приложение сможет продолжить и (предложить) загрузить самые последние выпуски. - person Rich; 08.12.2011
comment
В-третьих, с газетным киоском все это в любом случае становится историей! :-) - person Rich; 08.12.2011