Push-уведомления в Yandex Cloud Notification Service
Push-уведомления — это всплывающие сообщения на экране смартфона с информацией о событии в сервисе, доступных услугах, акциях, новостях и обновлениях.
Push-уведомления отправляются через сервисы уведомлений мобильных платформ:
- Apple Push Notification service
(APNs). - Firebase Cloud Messaging
(FCM). - Huawei Mobile Services
(HMS).
Позднее также будет реализована отправка Push-уведомлений через платформу RuStore
Примечание
В сервисе действуют ограничения. Подробнее см. в разделе Квоты и лимиты Yandex Cloud Notification Service.
Алгоритм доставки Push-уведомлений на примере FCM:
- В сервисе CNS создается канал мобильных Push-уведомлений под конкретную платформу (FCM) и ваше приложение.
- FCM поддерживает постоянное сетевое соединение со всеми зарегистрированными мобильными устройствами, чтобы доставлять Push-уведомления приложениям на этих устройствах.
- Ваше приложение на конкретном устройстве регистрируется в FCM и получает уникальный токен для отправки Push-уведомлений на это устройство.
- Токен сохраняется в CNS в качестве параметра мобильного эндпоинта приложения.
- Чтобы отправить уведомление, вы публикуете сообщение в CNS и указываете в качестве получателя идентификатор (ARN) эндпоинта.
Канал мобильных Push-уведомлений
Минимальный перечень исходных данных для создания канала мобильных Push-уведомлений:
Вы можете аутентифицироваться на мобильной платформе APNs с помощью токена или сертификата:
-
Для аутентификации с помощью токена вам понадобятся следующие данные:
-
Токен — файл с ключом подписи токена аутентификации.
Создайте и скачайте ключ подписи в своей учетной записи разработчика Apple: Certificates, Identifiers & Profiles → Keys →
. Скачать файл ключа можно только один раз. -
Идентификатор токена (Key ID) — узнайте идентификатор в учетной записи разработчика Apple: Certificates, Identifiers & Profiles → Keys. Убедитесь, что идентификатор соответствует ключу подписи, который вы загрузили на предыдущем шаге. Должен содержать 10 символов.
-
Идентификатор разработчика (Team ID) — указан в правом верхнем углу вашей учетной записи разработчика Apple. Должен содержать 10 символов: только цифры и буквы латинского алфавита.
-
Идентификатор приложения (Bundle ID) — узнайте Bundle ID
в учетной записи разработчика Apple: Certificates, Identifiers & Profiles → Identifiers или в приложении Xcode: Target → General → Identity. Может содержать только цифры, буквы латинского алфавита, дефисы и точки.
Подробнее о токене см. в документации Apple
. -
-
Для аутентификации с помощью сертификата понадобятся следующие данные:
- Сертификат — файл сертификата SSL в формате
.pem
. - Закрытый ключ сертификата — файл ключа в формате
.pem
.
Подробнее о сертификате см. в документации Apple
.Чтобы сохранить сертификат и закрытый ключ в отдельных файлах формата
.pem
, вы можете воспользоваться утилитой openssl в Linux:openssl pkcs12 -in Certificates.p12 -nokeys -nodes -out certificate.pem openssl pkcs12 -in Certificates.p12 -nocerts -nodes -out privatekey.pem
- Сертификат — файл сертификата SSL в формате
Аутентификация с токеном является предпочтительной, как более современная.
Имя канала уведомлений должно быть уникальным в облаке. Для каналов APNs рекомендуется указывать в имени идентификатор приложения (Bundle ID).
Вы можете аутентифицироваться на мобильной платформе FCM с помощью HTTP v1 API или Legacy API:
- Для аутентификации с помощью HTTP v1 API вам понадобится Ключ сервисного аккаунта Google Cloud в формате JSON. С помощью ключа генерируются временные токены OAuth 2.0 для аутентификации запросов в FCM HTTP v1 API. Можно получить в консоли управления Google Cloud.
- Для аутентификации с помощью Legacy API вам понадобится API-ключ (server key). Можно получить в консоли управления Firebase.
Примечание
Версия HTTP v1 API является предпочтительной, так как с июня 2024 года Legacy API не будет поддерживаться FCM
Подробнее см. в документации Firebase
Имя канала уведомлений должно быть уникальным в облаке. Для каналов FCM рекомендуется указывать в имени полное название пакета приложения (Package name).
Вы можете аутентифицироваться на мобильной платформе HMS с помощью следующих параметров:
- Идентификатор ключа.
- API-ключ.
Подробнее см. в документации HMS
Имя канала должно быть уникальным в облаке. Для HMS-каналов рекомендуется указывать в имени полное название пакета приложения (Package name).
После того как канал уведомлений создан, ему присваивается уникальный идентификатор (ARN).
Мобильные эндпоинты
Каждый канал имеет свою базу мобильных эндпоинтов для отправки уведомлений напрямую в приложение на устройства пользователей.
Мобильный эндпоинт содержит в себе информацию о токене для отправки Push-уведомлений на конкретное устройство и идентификатор (ARN) канала уведомлений.
Время жизни токена
Токены для отправки Push-уведомлений имеют ограниченное время жизни, которое зависит от конкретной платформы, действий пользователя и других факторов.
CNS при отправке уведомлений получает обратную связь от каждой платформы и использует ее для управления токенами. Если токен изменился, то CNS запишет в эндпоинт новый токен, или удалит эндпоинт, если токен устарел.
Рекомендуемый алгоритм работы с токенами на стороне мобильного приложения:
- Приложение регистрируется в сервисе мобильных уведомлений, например APNs, и получает токен для отправки Push-уведомлений.
- Приложение передает токен в CNS, получает идентификатор (ARN) эндпоинта и сохраняет его на устройстве.
- При каждом запуске приложение снова регистрируется в сервисе мобильных уведомлений, например APNs, и проверяет, не изменился ли токен.
- Если токен изменился, то приложение передает в CNS новый токен и идентификатор (ARN) эндпоинта. Если такого идентификатора (ARN) эндпоинта уже по какой-то причине нет, то в CNS создается новый эндпоинт и сохраняется в приложении.
Совет
Не рекомендуется постоянно перезаписывать токен в эндпоинт при каждом запуске приложения. Если токен не изменился, в некоторых случаях это может привести к потере уведомлений.