Push-уведомления — один из самых эффективных способов взаимодействия с пользователем после установки приложения. Они позволяют сообщить о новом сообщении, скидке, обновлении контента или напомнить о забытой корзине. Push-уведомления (push notifications) работают через облачные сервисы: Firebase Cloud Messaging (FCM) на Android и Apple Push Notification Service (APNS) на iOS. В этой статье разберём архитектуру уведомлений, их типы и процесс настройки для обеих платформ. Подробнее — в официальной документации FCM.
Главное
Push-уведомление — это сообщение, которое сервер отправляет на мобильное устройство без запроса со стороны приложения. Сообщение проходит через облачный сервис (FCM или APNS), который доставляет его на устройство даже если приложение закрыто. Уведомления делятся на два типа: display-уведомления (показываются пользователю) и data-уведомления (передают данные для фоновой обработки).
Архитектура push-уведомлений включает три компонента: (1) сервер приложения — отправляет запрос на FCM/APNS; (2) облачный сервис — маршрутизирует уведомление; (3) клиентское приложение — получает и обрабатывает уведомление. Сервер должен знать Device Token устройства, чтобы отправить уведомление именно ему. Для массовых рассылок используется Topic Subscription — подписка устройств на тематические каналы (новости, акции, погода).
На каждом устройстве уведомления обрабатываются операционной системой: Android — через NotificationManager и NotificationChannel, iOS — через UNUserNotificationCenter. Пользователь может настроить поведение уведомлений для каждого канала: разрешить звук, баннеры, показ на Lock Screen или полностью отключить. Правильная настройка каналов повышает вовлечённость и снижает количество отписок.
В IT Sectr мы проектируем систему push-уведомлений с учётом платформенных особенностей с самого начала. Ключевые решения: выбор между FCM и прямым APNS, формат payload, частота отправки и механика подписок. Это позволяет избежать ситуаций, когда уведомления не доходят или блокируются системой.
Firebase Cloud Messaging (FCM) — кроссплатформенный сервис Google для доставки уведомлений. FCM поддерживает Android, iOS, Web и Flutter. На iOS FCM работает через APNS: FCM отправляет запрос в APNS, который доставляет уведомление на устройство. Преимущества FCM: единый API для обеих платформ, встроенная аналитика, A/B-тестирование, топики и сегменты аудитории.
Apple Push Notification Service (APNS) — нативный сервис Apple. Работает только на устройствах Apple (iOS, macOS, watchOS, tvOS). Требует прямой авторизации через TLS-сертификат или токен (JWT). APNS обеспечивает минимальную задержку delivery и прямую интеграцию с iOS-функциями: PushKit, Notification Service Extension, критически важные оповещения (Critical Alerts).
Выбор между FCM и APNS зависит от архитектуры проекта. Если приложение только для iOS — APNS даёт больше контроля. Если кроссплатформенное — FCM удобнее единым API. Многие проекты используют FCM как основной сервис, а на iOS дополнительно настраивают PushKit для VoIP. Гибридный подход позволяет получить лучшее от обеих систем.
| Характеристика | FCM | APNS |
|---|---|---|
| Платформы | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| Авторизация | Server Key (Firebase Console) | TLS certificate или JWT token |
| Максимальный payload | 4 KB (data), 2 KB (notification) | 4 KB |
| Топики | Встроенные (Topic Messaging) | Нет (реализуются на стороне сервера) |
| Silent Push | Поддерживается | Поддерживается (content-available) |
| PushKit | Нет | Да (VoIP, live activities) |
| Аналитика | Firebase Analytics | Нет встроенной |
| Доставка на убитом устройстве | Ограниченно (зависит от производителя) | Да, через PushKit |
Rich Notification — уведомление, содержащее не только текст, но и медиа-контент: изображения, видео, аудио, а также кнопки действий. На Android реализуется через стили NotificationCompat: BigPictureStyle (большое изображение), BigTextStyle (свёрнутый/развёрнутый текст), InboxStyle (список сообщений), MediaStyle (управление воспроизведением). На iOS используются Notification Content Extension — отдельный target с кастомным UI для развёрнутого уведомления.
Silent Push (content-available на iOS) — уведомление, которое доставляется без отображения пользователю. Предназначено для фонового обновления данных: синхронизация контента, предзагрузка, обновление виджетов. На iOS для Silent Push нужно включить Background Modes → Remote notifications. На Android для обработки фоновых уведомлений используется FirebaseMessagingService с onMessageReceived. Важно: на iOS Silent Push имеет ограничение частоты (но не гарантирует доставку, если приложение не на переднем плане).
Interactive Notification позволяет пользователю выполнить действие без открытия приложения. На Android это кнопки (Action) в уведомлении: «Ответить», «Одобрить», «Отклонить». Действия обрабатываются через PendingIntent, который запускает BroadcastReceiver или Service. На iOS Notification Action регистрируются через UNNotificationAction и UNNotificationCategory. Кнопки могут быть foreground (открыть приложение), background (выполнить в фоне) или destructive (необратимое действие — удалить, заблокировать).
Notification Content Extension (iOS) — кастомный view controller для отображения расширенного контента уведомления при долгом нажатии или 3D Touch. Notification Service Extension (iOS) — middleware для модификации контента уведомления до показа: расшифровка E2E-сообщений, загрузка изображения, обфускация конфиденциальных данных. На Android аналогов нет — все модификации выполняются в FirebaseMessagingService.
Для Android необходимо: (1) добавить Firebase SDK в проект (google-services.json); (2) создать NotificationChannel (Android 8+) для каждой категории уведомлений; (3) реализовать FirebaseMessagingService для получения токена и входящих сообщений. Notification Channel обязателен — без него уведомления не будут показываться на Android 8+. Каналы имеют приоритет (IMPORTANCE_HIGH — звук + всплывающее окно, IMPORTANCE_LOW — без звука) и настраиваются пользователем в системных настройках.
Для iOS необходимо: (1) включить Push Notifications capability в Xcode; (2) настроить APNS ключ на Apple Developer Portal; (3) запросить разрешение через UNUserNotificationCenter.requestAuthorization — это системный диалог, который показывается один раз. Ответ пользователя критичен: если разрешение не получено, уведомления не будут доставляться. Рекомендуется объяснять пользователю, зачем нужны уведомления, до показа системного диалога (pre-permission prompt).
Device Token (iOS) и Registration Token (Android) — уникальные идентификаторы устройства для push-уведомлений. Токен генерируется при первом запуске приложения и может меняться: при переустановке, очистке данных, сбросе настроек конфиденциальности. Сервер должен регулярно обновлять токены. Firebase предоставляет удобный API для управления токенами через onNewToken, а также панель для тестовой отправки уведомлений (Firebase Console → Cloud Messaging).
Topic Subscription — один из самых эффективных механизмов FCM. Устройство подписывается на топик (например, «news», «promo_users_ios»), и сервер отправляет уведомления по топику без необходимости хранить список токенов. Firebase Topics поддерживают до миллиона подписчиков на топик и условную отправку (Condition) через язык выражений: «'news' in topics && ('US' in topics || 'UK' in topics)».
Notification Payload — JSON-структура, отправляемая через FCM/APNS. Для FCM: отдельно notification (видимая часть — title, body, image) и data (кастомные поля для приложения). Для APNS: aps-словарь с alert, badge, sound, category и content-available. Правильная структура payload критична: если notification + data приходят одновременно, приложение в фоне может не получить data. Рекомендуется использовать только data-сообщения для Android и передавать визуальные поля отдельно через FCM Console.
Часто задаваемые вопросы
FCM (Firebase Cloud Messaging) — сервис Google для Android и кроссплатформенных уведомлений. APNS (Apple Push Notification Service) — сервис Apple только для iOS/macOS. FCM может доставлять уведомления через APNS на iOS, выступая прокси-сервером.
Rich Notification — расширенное уведомление с медиа-контентом: изображения, видео, аудио, кнопки действий. На iOS реализуется через Notification Content Extension, на Android — через BigPictureStyle и InboxStyle.
Device Token — уникальный идентификатор устройства для отправки push-уведомлений. На Android это Registration Token от FCM, на iOS — Device Token от APNS. Токен может меняться при переустановке приложения или сбросе настроек, поэтому его нужно обновлять на сервере.
Silent Push (тихое уведомление) — уведомление без отображения пользователю. Используется для фонового обновления данных: синхронизация контента, обновление виджетов, prefetching. На iOS требует включения Background Modes → Remote notifications.
PushKit — фреймворк Apple для доставки уведомлений с высоким приоритетом, используемый в VoIP-приложениях (звонки, мессенджеры). PushKit доставляет уведомление даже если приложение убито, и гарантирует запуск приложения для обработки.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.