Push-уведомления iOS работают в dev, но не в prod

Сначала позвольте мне сказать, что я искал решение в течение нескольких часов. Я прочитал почти каждый вопрос SO по этому поводу, и ни одно из решений не сработало. Я также прочитал официальные документы Apple по этому вопросу и несколько других руководств. В основном я говорю это, чтобы избежать очевидных предложений, таких как (убедитесь, что это не «песочница» и т. д.).

У меня есть сертификаты push-уведомлений dev и prod для моего приложения на портале подготовки. Я выполнил шаги по созданию файла pem как для разработчиков, так и для продуктов, используя собственную документацию Apple.

У меня есть профили обеспечения разработки и специального распространения, привязанные к этому приложению.

Я могу создать свое приложение либо непосредственно из xcode на устройство, используя профиль разработчика, либо заархивировать его, используя специальный профиль распространения (затем я использую бета-конструктор для установки на устройство).

Независимо от того, строю ли я напрямую с профилем разработчика или использую специальный профиль (через бета-конструктор), push-уведомления работают при использовании файла песочницы + dev pem. Но как только я протестирую использование prod-серверов + pem-файл prod, push-уведомления не отправляются.

У меня есть два php-скрипта для тестирования, один для разработки, один для производства. Они по существу идентичны, за исключением URL-адреса сервера (песочница или не песочница) и файла pem, на который ссылаются (dev или prod).

Мне кажется странным, что даже со специальной сборкой я все еще могу отправлять push-уведомления с помощью песочницы и dev pem, это нормально?

Есть ли что-то еще, что я должен сделать при переходе от разработки к производству? Я чувствую, что я пробовал все на данный момент. Я повторно генерировал сертификаты и профили много раз. Я следую почти одной и той же процедуре для создания pem-файлов dev и prod и моих php-скриптов и почти идентичны (для prod и dev).

Я понятия не имею, это проблема сервера или проблема клиента (приложения)? Есть ли где-то настройка, которую я могу забыть?

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

Ваше здоровье.


person nebs    schedule 08.11.2011    source источник


Ответы (2)


Ну, я нашел проблему, это была глупая ошибка с моей стороны. Я поделюсь здесь, если кто-то еще сделал ту же ошибку.

Главное, чего я не знал, это то, что токен устройства отличается для dev и prod (для одного и того же устройства). Я использовал токен устройства, который получил при тестировании в dev, для тестирования в prod. Это отлично работало в dev, но когда я переключился на prod, я сохранил тот же токен устройства в php-скрипте (ошибочно предполагая, что токен устройства будет одинаковым для одного и того же устройства), но фактический токен устройства, зарегистрированный в prod, был разные.

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

Надеюсь, это избавит кого-то от разочарования.

person nebs    schedule 08.11.2011
comment
Я борюсь с этим прямо сейчас. Я пришел в проект, где push-уведомления работали в Dev, но теперь, когда я получил одобрение приложения в AppStore, они больше не работают. Является ли AppID одинаковым для всех пользователей по всему миру? Или это что-то, что генерируется вашим телефоном и специально сопоставляется с вашим устройством? - person Ethan Parker; 12.11.2014

Подобная проблема возникла у меня, я добавил Push-уведомления в существующее приложение, протестировал его, запустив Xcode на своем устройстве, и оно работало хорошо, но когда я создал архив и установил его через iTunes, он не получил Push-уведомления. Проблема заключалась в том, что когда я добавил разрешения для push-уведомлений, мой профиль подготовки устарел (недействителен), поэтому мне пришлось создать новый профиль подготовки, применить его к моему iTunes/телефону, и теперь, когда я устанавливаю приложение, оно работает хорошо.

person Roberto Rodriguez    schedule 26.09.2017