(iOS + StoreKit) Могу ли я определить, когда я в песочнице? - PullRequest
23 голосов
/ 13 марта 2012

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

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

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

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

Спасибо.

Ответы [ 3 ]

64 голосов
/ 13 марта 2012

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

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

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

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

9 голосов
/ 21 марта 2012

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

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

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

6 голосов
/ 02 июня 2012

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

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

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

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

Для невозобновляемых подписок производственный сервер возвращает не код состояния, а соответствующий чек.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...