Нет способа сопоставить данные клиента с данными вашей транзакции. Только Apple может сделать это.
Мое первое подозрение в том, что у вас могут возникнуть логические проблемы в процессе покупки. При правильной реализации временный сбой на шаге 3 не имеет значения.
Вы должны:
- Создать наблюдателя в очереди транзакций сразу после запуска приложения. Это позволит доставлять любые ожидающие транзакции вашему наблюдателю
- Когда вы получаете транзакцию покупки в своем наблюдателе, вы проверяете на своем сервере
- Только после того, как вы получили ответ от сервера, что покупкабыл успешно записан, звоните
finishTransaction
.
Таким образом, если с вашим сервером что-то пойдет не так или произойдет сбой приложения, транзакция все еще ожидает выполнения в очереди.
Если вы используете автообновление и / или неиспользуемый IAP, я настоятельно рекомендую вам предоставить кнопку «Восстановить покупки» в вашем пользовательском интерфейсе. Это упрощает для пользователя, если что-то идет не так или когда он переходит на новое устройство.
Если у вас есть пользователи, которые утверждают, что не получили то, за что заплатили, вы можете направить их в Apple App Storeподдержка, которая может вернуть транзакцию.