Подтвердить что ты не робот

(iOS + StoreKit) Могу ли я обнаружить, когда я в песочнице?

У меня есть покупки в приложении, которые работают нормально, и я отправляю маршрут проверки сервера. Сервер должен знать, есть ли я в песочнице или нет, поэтому пока я просто отправлю ему параметр "& sandbox = 1". Конечно, когда полная версия приложения отключена, я не буду отправлять этот параметр.

Я бы предпочел не иметь это жестко закодированное в моем приложении, так как это затруднит тестирование в будущем, и это еще одна (большая) вещь, которую нужно помнить, чтобы изменить, прежде чем отправлять сборки в Apple.

Есть ли способ, которым я могу спросить StoreKit, есть ли в песочнице, чтобы затем определить, нужно ли мне отправлять этот параметр на мой сервер? Кроме того, существует ли какая-либо другая передовая практика для проверки сервера?

Размышляя об этом больше, нужно ли мне сначала проверять серверную систему в реальном времени, а затем на песочнице? Если идентификаторы Apple разделены между системами live и sandbox, это не принесет никакого вреда?

Спасибо.

4b9b3361

Ответ 1

После небольшого рытья я нашел это от Apple Техническая нота TN2259:

Как проверить свою квитанцию ​​(iOS)?

Всегда проверяйте свою квитанцию ​​сначала с URL-адресом производства; перейдите к проверке с URL-адресом песочницы, если вы получите код состояния 21007. Следуя этому подходу, вы не должны переключаться между URL-адресами, пока ваше приложение тестируется или просматривается в песочнице или находится в прямом эфире в App Store.

Итак, похоже, что я должен полностью опустить параметр &sandbox и просто сделать это. Мне действительно приходилось копаться в этом ответе, поэтому я размещаю его здесь в надежде, что кто-то еще столкнется с ним!

Ответ 2

Я столкнулся с той же самой проблемой, когда мое приложение было отклонено, потому что "производственная" версия моего приложения, которое я отправил, была жестко запрограммирована для подключения к PHP script на моем сервере, который проверяет квитанции с реальным сервером AppStore (тогда как моя версия разработки указывает на другой PHP скрипт, который проверяет поступления с сервером sandbox). Однако после нескольких обменов с инженерами Apple я обнаружил, что они используют изолированные учетные записи пользователей для тестирования представленных приложений, что объясняет, почему они получили сообщение об ошибке.

Вместо условного построения моего приложения, чтобы указать на один script или другой, я буду использовать один script, который сначала пробует производственный сервер, а затем возвращается к серверу песочницы, если он получит код состояния 21007, как описано выше!

Спасибо большое!

Ответ 3

Всегда проверяйте свою квитанцию ​​сначала с URL-адресом для производства; перейдите к проверке с URL-адресом песочницы, если вы получите код состояния 21007.

К сожалению, в технической заметке не упоминается, что это справедливо только для автоматического обновления подписки!

Как показано в Руководстве по программированию при покупке приложений, ниже в таблице 7-1:

Важно. Необязательные коды статуса здесь применяются только при восстановлении информации об автоматической возобновляемой подписке. Не используйте эти коды состояния при тестировании ответов для других видов продуктов.

Для не возобновления подписки производственный сервер не возвращает код состояния, а правильный квитанция.

В случае, если вы вынуждены использовать не возобновление и реализовать свою собственную логику истечения срока действия подписки, возможно решение - отправить версию приложения на ваш сервер и отслеживать, какие версии находятся в разработке на данный момент, так как вы можете перенаправить на сервер sandbox.itunes, чтобы проверять квитанции, где это необходимо, и имитировать x-минутное время истечения срока подписки (как sandbox.itunes для автоматического обновления) для разработки на вашем сервере.