Каждая интеграция push-уведомлений iOS начинается с одной и той же задачи: доказать службе Apple Push Notification service, что вам разрешено отправлять сообщения пользователям вашего приложения. Apple предлагает два способа сделать это — ключ аутентификации APNs (.p8) или сертификат APNs (.p12) — и разница между ними заключается в том, что один вы настраиваете один раз, а другой будете продлевать каждый год, часто в самый неподходящий момент.
В этом руководстве объясняется, как на самом деле работает аутентификация APNs, когда использовать ключ .p8 вместо сертификата .p12 и несколько ошибок, которые связаны с неправильной настройкой.
Как работает аутентификация APNs
Когда ваш поставщик push-уведомлений — PushEngage или ваш собственный сервер — отправляет уведомление, он подключается к API поставщика APNs от Apple и должен доказать две вещи: что он уполномочен отправлять уведомления от вашего имени и что ему разрешено нацеливаться на bundle ID вашего приложения (в терминах APNs это «тема»). Ключ .p8 и сертификат .p12 — это просто два разных способа доказать это.
Сторона устройства отдельна. Ваше приложение регистрируется в APNs и получает токен устройства — эта часть никогда не меняется независимо от того, какой учетной записью пользуется ваш поставщик. Аутентификация — это исключительно забота сервера и Apple, поэтому вы можете переключать методы, не изменяя бинарный файл вашего приложения.
Ключ аутентификации .p8 (используйте его)
Ключ .p8 — это ключ подписи токенов. Ваш поставщик использует его для создания краткосрочных токенов JSON Web Tokens, которые аутентифицируют каждое соединение с APNs. Его свойства делают его выбором по умолчанию практически для всех:
- Он никогда не истекает. Никакого ежегодного продления, никаких перебоев в работе push-уведомлений в забытую дату.
- Один ключ охватывает все приложения в вашей учетной записи разработчика. Выпустите второе приложение, и тот же ключ будет его аутентифицировать.
- Он работает как для сред разработки, так и для продакшена — никаких пар сертификатов для песочницы/продакшена.
- Он передается как три значения: сам файл .p8, 10-значный идентификатор ключа (Key ID) и идентификатор вашей команды (Team ID).
Две вещи, которые нужно знать перед его созданием. Apple ограничивает вас двумя активными ключами APNs на учетную запись, поэтому крупные организации должны относиться к созданию ключей как к обдуманному действию, а не как к привычке для каждого проекта. И файл .p8 можно загрузить только один раз во время создания — сохраните его там, где ваша команда сможет его найти, потому что Apple не предоставит его вам снова.
Сертификат .p12 (устаревший путь)
Сертификат .p12 — это клиентский сертификат TLS, экспортированный из Keychain Access после его выдачи Apple. Он аутентифицирует само соединение, а не подписывает токены. Он все еще работает, и некоторые политики безопасности предприятий по-прежнему требуют его, но его ограничения — причина, по которой Apple направляет новые интеграции к ключу:
- Он истекает каждый год. Наиболее частая причина внезапного полного сбоя push-уведомлений — это сертификат APNs, который тихо истек.
- Он применим к одному приложению. Каждый идентификатор пакета требует своего сертификата, а каждый сертификат — своего календаря продления.
- Требуется Mac. Для процесса экспорта запроса на подпись и связки ключей нет браузерного решения.
Что следует использовать?
| Ключ аутентификации .p8 | Сертификат .p12 | |
|---|---|---|
| Срок действия | Никогда | Каждые 12 месяцев |
| Область применения | Все приложения в учетной записи | Один идентификатор пакета |
| Среды | Разработка + производство | Раздельно или вместе для каждого сертификата |
| Создано из | Любой браузер | Mac с Keychain Access |
| Лимит учетной записи | 2 активных ключа | Пары для каждого приложения |
| Использовать, когда | Почти всегда | Политика требует сертификаты |
Честный ответ: используйте ключ .p8, если только политика безопасности не требует использования сертификата. Меньше движущихся частей, нечего продлевать, один идентификатор для всего вашего портфолио.
Создание ключа .p8 за три минуты
- В вашей учетной записи Apple Developer перейдите в раздел Certificates, Identifiers & Profiles → Keys и зарегистрируйте новый ключ.
- Назовите его, включите флажок Apple Push Notifications service (APNs) и продолжите.
- Загрузите файл .p8 (помните: один шанс), и запишите Key ID, показанный на экране подтверждения, и ваш Team ID со страницы членства в учетной записи.
- Загрузите все три значения вашему поставщику push-уведомлений. В PushEngage это один экран в настройках вашего приложения — руководство по учетным данным APNs проведет вас через это с помощью скриншотов.
Ошибки, которые это объясняет
Удивительно большая доля обращений «не работает отправка» на самом деле является проблемами с учетными данными, маскирующимися под другие ошибки. Типичные виновники:
- BadDeviceToken — вы отправляете токен приложения, собранного в песочнице, через производственную среду, или наоборот. Сборки отладки из Xcode взаимодействуют с песочницей; сборки TestFlight и App Store взаимодействуют с производственной средой.
- TopicDisallowed — учетные данные не охватывают идентификатор пакета, на который вы нацеливаетесь. Обычно возникает при использовании сертификатов .p12 для каждого приложения и скопированной конфигурации.
- Внезапный сбой доставки на 100% — истекший срок действия .p12. Проверьте дату истечения срока действия сертификата, прежде чем проверять что-либо еще.
- InvalidProviderToken — отозванный ключ .p8 или неправильная пара Key ID/Team ID вместе с действительным файлом.
Как это вписывается в вашу интеграцию
Учетные данные APNs — это первый шаг из ровно одной сессии настройки. Загрузите .p8 в PushEngage один раз, и все последующие действия — интеграция iOS SDK 1.0, мультимедийные уведомления через ваше расширение уведомлений, триггерные кампании и сама доставка — будут работать с ним без дальнейших церемоний. Если вы переходите с Firebase, тот же ключ, который вы дали FCM, работает и здесь, что отчасти объясняет, почему миграция с FCM на iOS — это проект на полдня.
Для уровня стратегии, который следует за настройкой, начните с руководства по маркетингу push-уведомлений для приложений. А когда вы будете готовы к отправке, полное руководство по настройке iOS проведет вас от учетных данных до первой кампании менее чем за час.