Недействительный токен при отправке уведомления PushKit в производственной среде

Я пытаюсь отправить уведомления VoIP через PushKit, но в среде производства (распространения) я получаю «Недействительный токен» с сервера.

все работает нормально в среде разработки с тем же сертификатом и URL-адресом: ssl://gateway.sandbox.push.apple.com с портом: 2195, но когда я меняю URL-адрес на: ssl://gateway.push.apple.com, я получаю ошибку «Недействительный токен» без дополнительных данных


person Ario ilkhani    schedule 01.07.2017    source источник
comment
проверьте свой файл p12, предназначен ли он для разработки или распространения   -  person Abhishek Thapliyal    schedule 01.07.2017
comment
@AbhishekThapliyal Существует только один тип сертификата для VoIP Services Certificate, и сертификат должен работать для обоих envs.   -  person Ario ilkhani    schedule 01.07.2017
comment
Пожалуйста, проверьте еще раз, так как у Apple есть эти сертификаты распространения и разработки, даже у обычных APNS есть два типа распространения и разработки.   -  person Abhishek Thapliyal    schedule 01.07.2017
comment
@AbhishekThapliyal В developer.apple.com в разделе Certificates, Identifiers & Profiles, когда я пытаюсь добавить новый сертификат, в разделе «Производство» есть только одна опция для служб VoIP VoIP Services Certificate: Establish connectivity between your notification server, the Apple Push Notification service sandbox, and production environment to alert background VoIP apps of incoming activity. A separate certificate is required for each app you distribute.   -  person Ario ilkhani    schedule 02.07.2017


Ответы (1)


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

Так не пойдет. Если вы хотите использовать производственную среду, вам необходимо убедиться, что ваш клиент / приложение создает токен устройства в производственной среде. (Вы не можете использовать токен устройства, сгенерированный клиентом с помощью песочницы, когда ваш сервер использует производственную среду)

Pl. обратите внимание, что отдельные токены устройства создаются для изолированной программной среды / производственной среды для одного и того же приложения / клиента на одном устройстве. Надеюсь, поможет.

person Ayush    schedule 03.07.2017
comment
Спасибо за ваш ответ, но я уже использую производственный токен в производственном окружении, я также обнаружил странное поведение, для некоторых токенов я не получаю эту ошибку недопустимого токена. Я попытался отправить push на три разных устройства (на их рабочие токены, все установленные из testFlight), для двух из них я получаю сообщение об ошибке, но для другого это успешно! - person Ario ilkhani; 04.07.2017
comment
Ошибка недопустимого токена возвращается производственной APNS только в том случае, если этот токен не выделен какому-либо устройству этим производственным сервером. Если вы уверены, что клиентское приложение запросило этот токен устройства, используя только производственную APNS, тогда APNS сможет маршрутизировать уведомление для этого пункта назначения. Это странно. Не должно случиться. То, что вы говорите, если это правда, похоже, это проблема с синхронизацией токенов устройства на серверах APNS (чего мы не ожидаем по своей природе от серверов Apple). - person Ayush; 04.07.2017
comment
Я бы также посоветовал вам убедиться, что ваше приложение не кэширует токены устройства. Может случиться так, что ваше приложение не сможет зарегистрировать новый токен производственного устройства, и оно вернет кешированный. (Только одна догадка). Я считаю, что вы убедились, что все ваши устройства (приложения) связаны только с производственным сертификатом. - person Ayush; 04.07.2017
comment
спасибо и извините за мой отложенный ответ, я вроде как нашел проблему, но я не публикую ее как ответ, потому что я не уверен, прав ли я. Через несколько дней после появления этой проблемы на testFlight я выпустил приложение в App Store без каких-либо изменений, и теперь оно работает! нет ошибки недопустимого токена. Я думаю, что, возможно, когда приложение находится в тестовом полете, яблоко ведет себя как бы случайным образом и иногда регистрирует устройство в производственной среде env и st (все еще не уверен), поэтому, возможно, testFlight следует просто игнорировать, надеясь, что все будет работать нормально на Магазин приложений! - person Ario ilkhani; 08.07.2017
comment
У меня аналогичная проблема в моем приложении. Когда я переключаюсь между своей версией Testflight (в которой используется рабочая среда) и загрузкой приложения (песочница) неопубликованно, я получаю токен для неправильной среды при первом запуске приложения. На самом деле это старый токен. Когда я убиваю приложение и перезапускаю его снова, я получаю токен для правильного токена. Я получаю токен через обратный вызов func pushRegistry(registry: PKPushRegistry!, didUpdatePushCredentials credentials: PKPushCredentials!, forType type: String!). К сожалению, я не нашел решения, но это только проблема разработки. - person J-Bossi; 29.07.2017
comment
Привет @ J-Bossi, интересно, видишь ли ты это все еще? Мы только что пытались отследить проблему и, похоже, наблюдаем очень похожие симптомы - в первый раз, когда приложение запускается после переключения между testflight / dev, оно получает неправильный токен устройства APN. - person Sam Mason; 14.08.2017
comment
Я пока не нашел подходящего решения. Я просто сказал своим разработчикам и тестировщикам перезапустить приложение, как только они переключатся между загрузкой неопубликованных приложений и тестированием. - person J-Bossi; 14.08.2017