Когда квитанция приложения получает новую транзакцию?

У меня есть приложение, которое использует ныне устаревший метод реализации IAP до iOS 7, просматривая transactionReceipt, содержащийся в транзакциях, которые поступают в наш наблюдатель очереди транзакций. Это работало отлично. Новая реализация наблюдателя просто отслеживает, сообщается ли о каких-либо новых транзакциях (состояние SKPaymentTransactionStatePurchased), и если таковые обнаружены в очереди, захватывает квитанцию ​​о приложении (не transactionReceipt) и отправляет что на сервер.

До сегодняшнего дня я обнаружил, что новая транзакция всегда находилась в поле «in_app» в расшифрованном чеке приложения, который я получаю от Apple. Сегодня я тестирую подписки (которые, насколько я могу судить, работают), но заметил, что когда я заказываю неподписной, нерасходуемый продукт, транзакция для него нет в " in_app" в квитанции приложения, пока я не закажу еще один продукт без подписки, не подлежащий использованию. В этот момент я вижу ранее заказанный продукт в массиве «in_app», но не новый заказанный.

Как ранее купленные, так и вновь приобретенные товары присутствуют в массиве "latest_receipt_info". Я бы просто использовал этот массив вместо «in_app», но я не видел «latest_receipt_info», пока не начал тестировать подписки, поэтому я не думаю, что он всегда там.

Вопрос: Я пропустил шаг? Должен ли я обновлять квитанцию ​​приложения в наблюдателе очереди транзакций перед его использованием? Если я это сделаю, не будет ли необъяснимым образом запрашивать у пользователя учетные данные Apple ID (они только что разместили заказ и ввели свои учетные данные; я не хочу, чтобы им пришлось делать это снова)?


person Craig    schedule 06.12.2017    source источник


Ответы (1)


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

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

Другой альтернативой является использование latest_receipt_info на стороне сервера в качестве источника правды. Это поле присутствует только в том случае, если вы отправляете общий секрет для приложения iTunes Connect в поле password запроса JSON.

Лично я бы использовал latest_receipt_info.

person Jacob Eiting    schedule 07.12.2017
comment
Я думаю, что вы единственный человек здесь, кто знает что-нибудь об IAP. :-) - person Craig; 07.12.2017