Я создал приложение с автоматически возобновляемыми подписками.
Ниже приводится логика, которую я использую, чтобы узнать, есть ли у пользователя активная подписка.
- Каждый раз, когда вызывается
paymentQueue(_:updatedTransactions:)
изSKPaymentQueue
, я пытаюсь выполнить проверку квитанции, выполнив следующие действия. - Проверяю, есть ли местная квитанция. Если его нет, я использую
SKReceiptRefreshRequest
, чтобы обновить квитанцию. - Я отправляю информацию о квитанции на
verifyReceipt
конечную точку сервера App Store. - Сервер возвращает ответ, содержащий информацию о дате окончания подписки.
- Я сохраняю дату истечения срока действия в приложении и представляю соответствующий пользовательский интерфейс в зависимости от того, есть ли у пользователя активная подписка или нет.
Обзор App Store несколько раз отклонял мое приложение из-за ошибок SKReceiptRefreshRequest
. Я не могу воспроизвести ошибку, с которой столкнулась комиссия по обзору App Store.
Во время поиска в Интернете, чтобы решить эту проблему, я узнал следующие факты о местной квитанции:
- Местный чек всегда присутствует в производственном режиме. Локальная квитанция может отсутствовать, если приложение установлено с помощью Testflight или во время тестирования. (ссылка)
- Сервер App Store вернет последнюю информацию о подписке, даже если он отправил старую локальную квитанцию (ссылка а>)
Из двух приведенных выше сведений я сделал вывод, что нет необходимости когда-либо вызывать SKReceiptRefreshRequest
в производственной среде, потому что сервер App Store предоставит самые свежие данные, даже если локальная квитанция устарела, а локальная квитанция всегда присутствует в производственной среде.
Чтобы мое приложение прошло проверку в App Store, я решил удалить SKReceiptRefreshRequest
, поскольку он дает ошибки в сборках Testflight и не требуется в производственной среде.
Может ли кто-нибудь подтвердить, что я прав?