2012-03-13 6 views
21

У меня есть покупки в приложениях, которые работают нормально, и я иду по пути проверки сервера. Сервер должен знать, есть ли я в песочнице или нет, поэтому пока что я просто отправлю ему параметр « sandbox = 1». Конечно, когда полная версия приложения отключена, я не буду отправлять этот параметр.(iOS + StoreKit) Могу ли я обнаружить, когда я в песочнице?

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

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

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

Спасибо.

+0

Об этом говорится в [Управление подписками с покупкой в ​​приложении] (https://developer.apple.com/videos/wwdc/2012/?id=308). Время: 24:13 – DanSkeel

ответ

62

После немного копать я нашел это от компании Apple Technical Note TN2259:

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

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

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

+0

Также это выглядит так: не полагайтесь на ЧТО КОД В ЧАСТИ: http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the -sandbox – Fattie

+4

Комментарий, чтобы сэкономить немного времени для будущих посетителей. Правда, в некоторых документах содержится таблица кодов статуса, предположительно только для проверки подписки, но этот код, в частности, рекомендуется для этого поведения Apple, так как может можно увидеть по ссылке в этом ответе. Поэтому 21007 должен быть безопасным для использования. – roguenet

+0

Примечание было перемещено здесь: https://developer.apple.com/library/ios/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL –

8

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

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

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

6

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

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

Как In-App Purchase Programming Guide упоминает ниже таблице 7-1:

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

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

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

+0

Это абсолютно критический момент , gr, спасибо за этот флаг. Обратите внимание, что 21008 и 21006 могут ТАКЖЕ БЫТЬ СООТВЕТСТВУЮЩИМИ. http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the-sandbox. Конечно, лучшим решением является поиск ЛЮБОЙ ОШИБКИ, т. е. отсутствие «условий успеха» ». – Fattie

+0

«При проверке квитанций на вашем сервере ваш сервер должен иметь возможность обрабатывать приложение, подписанное производством, получать свои квитанции из тестовой среды Apple. Рекомендуемый подход заключается в том, чтобы ваш производственный сервер всегда проверял поступления к продукту App Store в первую очередь. проверка не выполняется с кодом ошибки «Получение почтового ящика, используемого в производстве», вместо этого проверяйте вместо тестовой среды ». (Https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/StoreKitGuide.pdf) –

Смежные вопросы