Понимание проверки чека и обновления квитанции в iOS

У нас есть проблемы, которые полностью понимают поток проверки валидации в iOS.

Вот что мы сейчас делаем (в разработке):

В applicationDidFinishLaunching и в applicationWillEnterForeground мы проверяем получение на стороне сервера, если нет квитанции или квитанция недействительна, мы пытаемся обновить квитанцию ​​и подтвердить ее.

Вот некоторые вопросы/вопросы:

  • Каковы случаи отсутствия квитанции на устройстве?

  • Должен ли мы всегда выдавать запрос обновления квитанции, когда нет квитанции?

  • Почему это окно предупреждения иногда отображается при запуске? Я понимаю, что это показано в запросе обновления квитанции?

Войти в систему?

  1. Когда должна произойти проверка чека? В настоящее время мы делаем это, когда совершается покупка для проверки покупки, является ли это правильное использование?

Ответы

Ответ 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/