У меня есть приложение, которое использует ныне устаревший метод реализации IAP до iOS 7, просматривая transactionReceipt
, содержащийся в транзакциях, которые поступают в наш наблюдатель очереди транзакций. Это работало отлично. Новая реализация наблюдателя просто отслеживает, сообщается ли о каких-либо новых транзакциях (состояние SKPaymentTransactionStatePurchased
), и если таковые обнаружены в очереди, захватывает квитанцию о приложении (не transactionReceipt
) и отправляет что на сервер.
До сегодняшнего дня я обнаружил, что новая транзакция всегда находилась в поле «in_app» в расшифрованном чеке приложения, который я получаю от Apple. Сегодня я тестирую подписки (которые, насколько я могу судить, работают), но заметил, что когда я заказываю неподписной, нерасходуемый продукт, транзакция для него нет в " in_app" в квитанции приложения, пока я не закажу еще один продукт без подписки, не подлежащий использованию. В этот момент я вижу ранее заказанный продукт в массиве «in_app», но не новый заказанный.
Как ранее купленные, так и вновь приобретенные товары присутствуют в массиве "latest_receipt_info". Я бы просто использовал этот массив вместо «in_app», но я не видел «latest_receipt_info», пока не начал тестировать подписки, поэтому я не думаю, что он всегда там.
Вопрос: Я пропустил шаг? Должен ли я обновлять квитанцию приложения в наблюдателе очереди транзакций перед его использованием? Если я это сделаю, не будет ли необъяснимым образом запрашивать у пользователя учетные данные Apple ID (они только что разместили заказ и ввели свои учетные данные; я не хочу, чтобы им пришлось делать это снова)?