Понимание проверки чека и обновления квитанции в iOS
У нас есть проблемы, которые полностью понимают поток проверки валидации в iOS.
Вот что мы сейчас делаем (в разработке):
В applicationDidFinishLaunching
и в applicationWillEnterForeground
мы проверяем получение на стороне сервера, если нет квитанции или квитанция недействительна, мы пытаемся обновить квитанцию и подтвердить ее.
Вот некоторые вопросы/вопросы:
-
Каковы случаи отсутствия квитанции на устройстве?
-
Должен ли мы всегда выдавать запрос обновления квитанции, когда нет квитанции?
-
Почему это окно предупреждения иногда отображается при запуске? Я понимаю, что это показано в запросе обновления квитанции?
![Войти в систему?]()
- Когда должна произойти проверка чека? В настоящее время мы делаем это, когда совершается покупка для проверки покупки, является ли это правильное использование?
Ответы
Ответ 1
- При производстве квитанция всегда доступна на устройстве. В тесте после
первой установки нет. Поэтому, если вы хотите сделать правильный тест,
вы должны восстановить покупку, даже если она не является покупкой этого пользователя в тесте
Окружающая среда. Почему это? Приложение, загруженное из магазина appstore, всегда поставляется с квитанцией, даже если они бесплатны.
- Зависит от бизнес-логики, которую вы хотите применить. Если вы проверяете получение к серверу каждый раз при запуске приложения, конечно, вам нужна квитанция. Если он отсутствует (но в производстве всегда) или недействителен, вы можете попросить обновить или восстановить, но, насколько я помню, вы всегда должны сначала спросить пользователя, хочет ли он это сделать (может быть причина отказа).
Восстановление и обновление - это не одно и то же.
- Обычно это появляется при покупке/восстановлении/обновлении. Но также, если у учетной записи есть несколько ожидающих запросов, потому что приложение разбилось, или вы как-то прервали отладку до конца запроса, вам будет скучно. Невозможно очистить их программно, просто войдите, пока они не остановятся. Конечно, это не будет действительным тестом.
- Это зависит от вас и от типа покупки. Если это автоматическая подписка, вы можете проверить получение к серверу, а затем сохранить "дату окончания" на клиенте и сделать еще одну проверку после истечения срока. Обратите внимание, что квитанции могут быть довольно большими, потому что они также имеют все исторические значения.
Ответ 2
- Как сказал Чжан, если нет покупки или восстановления, в магазине не будет никакой квитанции.
- Найдите квитанцию. Если квитанция не найдена, проверка не выполняется, и вы не должны снова запрашивать обновление квитанции. Только после того, как вы восстановите процесс самостоятельно, вы должны снова запросить получение.
- Это будет отображаться всегда, когда вы попытаетесь обновить квитанцию (или выберете из настроек, которые вы не хотите запрашивать пароль в течение 15 минут).
- Да.
Для получения дополнительной информации смотрите здесь:
https://www.objc.io/issues/17-security/receipt-validation/#about-validation
Ответ 3
1.Нет покупки/Восстановления не было.
2.Nope.See 1
4.Sure.For расходных материалов, не забудьте сохранить хэш на вашем сервере, чтобы победить атаку повтора.
Ответ 4
Если пользователь загрузил приложение из App Store - да, квитанция всегда существует.
Однако в песочнице, если ваше приложение было установлено с помощью Xcode или Testflight, квитанция не появится, пока вы не совершите покупку или восстановление.
Посмотрите этот полный FAQ о проверке квитанции в нашем блоге:
https://blog.apphud.com/receipt-validation/