Ваш лог c имеет несколько fl aws:
1) paymentQueue(_:updatedTransactions:)
вызывается в фоновом режиме и (насколько я знаю) обновляет уже локальную квитанцию. Также приложение, загруженное из App Store, всегда содержит квитанцию. Таким образом, нет необходимости вызывать SKReceiptRefreshRequest
в этом методе.
2) SKReceiptRefreshRequest
требует, чтобы пользователи вводили его пароль, чтобы разрешить квитанцию refre sh. Поскольку вы вызвали метод в paymentQueue(_:updatedTransactions:)
, который вызывался в фоновом режиме, я считаю, что это проблема, из-за которой запрос refre sh не был выполнен, и Apple отклонила ваше приложение. Тем не менее, этот метод имеет свою причину: на производстве вам нужно, чтобы он позволял пользователям восстанавливать покупки после переустановки приложения или на других устройствах, а также для отладки и сборки TestFlight он нужен для получения последней квитанции.
3 ) Не следует отправлять квитанцию из вашего приложения на конечную точку Apple
Предупреждение
Не вызывать конечную точку сервера App Store verifyReceipt из вашего приложения. Вы не можете создать надежное соединение между устройством пользователя и App Store напрямую, потому что вы не контролируете ни один конец этого соединения, что делает его уязвимым для атаки «человек посередине».
Источник
Как действовать?
Я бы порекомендовал сделать следующее:
1) Не вызывайте SKReceiptRefreshRequest
в paymentQueue(_:updatedTransactions:)
2) Если это еще не сделано, добавьте в свое приложение кнопку «восстановить покупки» (которая вызывает SKReceiptRefreshRequest
)
3) Внедрить локальный или сервер-сервер подтверждение получения