Ответ 1
Я повторно загрузил сертификат производства push и экспортировал его из keychain как .p12. Это, похоже, решило проблему. Кажется странным, хотя плохой секретный ключ давал мне ошибку "Недопустимый токен".
Мое приложение теперь доступно в магазине приложений, поэтому я загрузил его на свое устройство. В ходе разработки push-уведомления работали нормально. Я использую JavaPNS для отправки уведомлений, и я переключил его, чтобы указать на серверы производства Apple.
Однако теперь я получаю ошибку Invalid Token от серверов APNS.
У меня есть схема архива, установленная на "Release", и у меня есть Release, чтобы использовать этот профиль распространения:
Внутри файла инициализации вы можете увидеть, что я правильно настроил среду:
Но я все еще получаю ошибку. Когда я смотрю в своей базе данных, я думаю, что токен устройства, который приложение возвращает мне, это то же самое, что и разработка, так что это может быть проблемой. Но я не знаю, почему это будет возвращено, учитывая, что приложение подписано правильно. Это устройство, которое я также использовал для тестирования, может быть, это проблема? Любые другие идеи о том, что происходит здесь?
Спасибо!
EDIT: я не храню токен в своем коде, ответ Eran предполагает, что единственными другими возможностями являются старый токен в моей базе данных или приложение не подписывается профилем производства. Я очистил свою базу данных, поэтому я знаю, что это не первый, и что касается последнего, я не вижу, как это может быть так, поскольку у меня есть только один профиль распространения, и, как я показал выше, это имеет правильный ключ "aps-environment". XCode даже не разрешил мне использовать профиль разработки для представления магазина приложений, не так ли? Несколько других возможностей:
Возможно ли, что что-то не так с ключом, который я отправляю с моими уведомлениями, может вызвать "Недействительный токен"? Если да, могу ли я восстановить этот ключ для моих существующих профилей?
Нет ли другого профиля обеспечения, содержащегося в AppID, для целей push-уведомлений? Может ли проблема с этим вызвать недопустимую ошибку токена?
Я повторно загрузил сертификат производства push и экспортировал его из keychain как .p12. Это, похоже, решило проблему. Кажется странным, хотя плохой секретный ключ давал мне ошибку "Недопустимый токен".
Маркер устройства для производства отличается от разработки, поэтому, если вы отправляете маркер разработки на серверы APNS для производства (или наоборот), это причина проблемы.
Возможно, вы не удалили маркер устройства разработки с вашего сервера при переходе на производство.
Или, если вы получаете маркер разработки из своего производственного приложения, либо приложение возвращает локально сохраненный токен устройства (который вы, возможно, сохранили на своем устройстве во время разработки), вместо того, чтобы просить Apple получить новый или (если вы спросите Apple о текущем токене и по-прежнему получаете токен разработки), ваше приложение не подписано с профилем подготовки производства.
xCode 8.0
У меня была ошибка "неправильного токена" после установки xCode 8.0.
Проблема была найдена здесь: Навигатор проекта → выберите проект (самый верхний элемент) → выберите название проекта в меню "Цели" → выберите "Возможности" в верхнем меню → просмотрите раздел уведомлений PUSH → нажмите "Исправить проблему",
Обнаружена основная причина этой проблемы, из-за плохого закрытого ключа. Чтобы решить эту проблему, просто создайте сертификат .p12 с .pem. Для создания файла p12 с .pem файлом выполните следующий метод
MyApp - приложение iOS, которое отправляет и получает Push-уведомления MyApp-to-MyApp с использованием идентификаторов токенов APN, извлеченных из базы данных, которая обновляется каждым MyApp при входе в систему. Уведомления Push Push отправляются MyApp с помощью API NWPusher.
Пока проект запускается в режиме "Разработчик" (Debug), отправляемые и полученные Push Notifications работают отлично. Но в режиме "Производство" отправка Push-уведомлений не будет работать.
Я вернулся и полностью воссоздал свои AppID, сертификаты SSL, положения и т.д., но безрезультатно. Затем я использовал приложение NWPusher MacOS Pusher, чтобы поэкспериментировать с отправкой Push-уведомлений в MyApp. Я сконфигурировал Pusher для отправки Push Notification (tokenID специального распределения MyApp) с сертификатом MyApps Production SSL и получил следующее сообщение в журнале Pusher: " Ошибка уведомления: недопустимый токен APN".
Затем я заметил, что Pusher имеет флажок " Использовать среду песочницы". Я снял флажок и снова попробовал. На этот раз Push-уведомление было отправлено, а затем получено целевым телефоном без каких-либо ошибок. Это заставило меня взглянуть на вызов NWPusher.connect:
Swift:
let pusher:NWPusher? = try? NWPusher.connect(withPKCS12Data: pkcs12! as Data, password:APNS_Certificate_Password,environment:NWEnvironment(rawValue:1)!)
который имеет аргумент среды NWEnvironment enum с возможными значениями 0 = нет, 1 = песочница, 2 = производство, 3 = авто.
Изменение rawValue: 1 (разработка песочницы) на rawValue: 2 (производство) исправлено: сообщение Push Push Production теперь работает без ошибок.