Firebase Cloud Messaging (FCM) — это бесплатный кроссплатформенный сервис Google, который передаёт сообщения из доверенной среды на клиентские приложения Apple, Android и web. Он входит в платформу Firebase, и через него приложение получает push-уведомления и сообщения с данными для собственной логики.
Для маркетолога и разработчика FCM — канал, по которому приложение доставляет сообщение пользователю, даже когда оно закрыто. Главное в нём то, что сервис принимает сообщение к доставке, но показ на устройстве не гарантирует. Если нужны основы push-рассылок без привязки к Firebase, начните со статьи о том, что такое push-уведомления и как их создать.
- Как работает Firebase Cloud Messaging для push-уведомлений
- Настройка FCM для приложения на Android и iOS
- Отправка push-уведомлений через HTTP v1 API и Admin SDK
- Типы сообщений FCM, notification и data
- Токены, топики и группы устройств
- Срок жизни сообщения и причины недоставки уведомления
- Работает ли FCM в России и какие есть альтернативы
- Метрики FCM и кейс push в триггерных рассылках
- FAQ по Firebase Cloud Messaging
- Коротко о главном
Как работает Firebase Cloud Messaging для push-уведомлений
В реализации FCM два участника:
- Доверенная среда: сервер приложения или Cloud Functions for Firebase, облачные функции Google. Она строит сообщение, адресует его и отправляет.
- Клиентское приложение на Apple, Android или в браузере, которое получает сообщение через транспортный сервис своей платформы.
Путь одного сообщения состоит из четырёх звеньев:
- инструмент, создающий запрос;
- бэкенд FCM;
- транспортный уровень платформы
- FCM SDK, то есть библиотека внутри приложения на устройстве.
Бэкенд FCM принимает запросы, раздаёт сообщения подписчикам топиков и присваивает сообщению идентификатор. На Android транспортный уровень работает на устройствах с Google Play services, поэтому доставка зависит от них. На устройствах Apple эту роль выполняет Apple Push Notification service (APNs), в браузере — протокол Web Push.
Запрос создают двумя способами. Встроенный в консоль Firebase инструмент Notifications composer подходит для тестов и маркетинговых рассылок, а рабочая отправка идёт с сервера через Firebase Admin SDK или серверный протокол FCM. Получение идентификатора для адресации (FID, в старых версиях SDK — токена регистрации) происходит на устройстве, дальше приложение передаёт его на сервер. У каждого звена свои условия, поэтому недоставку ищут по цепочке.

Настройка FCM для приложения на Android и iOS
Подключение FCM для мобильного приложения идёт в одном порядке: проект в консоли Firebase, регистрация приложения, конфигурационный файл, FCM SDK, FID и тестовая отправка из консоли. Android и iOS добавляются в проект как отдельные приложения.
- Перейдите в консоль Firebase и создайте проект Firebase или выберите существующий.
- Нажмите кнопку добавления приложения и зарегистрируйте Android- и iOS-версии отдельно.
- Добавьте в приложение конфигурационный файл, который выдаёт консоль.
- Подключите FCM SDK.
- Получите на устройстве FID (в старых версиях SDK — токен регистрации) и передайте его на сервер.
- Отправьте тестовое сообщение из Notifications composer.
Для iOS понадобится ключ аутентификации APNs: его создают в Apple Developer Member Center и загружают в консоль Firebase. По умолчанию FCM SDK использует method swizzling, то есть подмену методов, чтобы сопоставить токен APNs с идентификатором установки. Отключить её можно флагом FirebaseAppDelegateProxyEnabled=NO. Если сообщения не приходят, проверьте три точки: приложение есть в проекте, ключ APNs загружен, идентификатор дошёл до сервера.
Разрешение на уведомления в Android 13 и выше
С Android 13 (API 33) приложение запрашивает у пользователя разрешение POST_NOTIFICATIONS. Пока пользователь его не дал, уведомления нового приложения на таком устройстве выключены. FCM SDK версии 23.0.6 и выше добавляет разрешение в манифест, но сам запрос во время работы приложения остаётся за разработчиком. Поэтому при жалобах на недоставку статус разрешения проверяют вместе с настройкой FCM.
Отправка push-уведомлений через HTTP v1 API и Admin SDK
Отправлять сообщения с сервера можно через Firebase Admin SDK или напрямую через HTTP v1 API. Документация Firebase рекомендует Admin SDK, а Notifications composer оставляет для тестов и маркетинговых рассылок. Рабочая отправка — часть разработки мобильного приложения.
Запросы HTTP v1 авторизуются краткоживущим токеном доступа OAuth 2.0, который получают из сервисного аккаунта. Это служебная учётная запись проекта, а не серверный ключ. На инфраструктуре Google подходят Application Default Credentials, то есть учётные данные самого окружения, а вне неё нужен JSON-файл сервисного аккаунта из проекта Firebase.
Старые API с серверным ключом Google отключил в 2024 году, поэтому чек-листы со строкой «Server Key» устарели, а рабочий путь один — HTTP v1. С помощью Admin SDK можно отправить одно сообщение на список до 500 токенов за вызов.
Квоты и стоимость отправки сообщений
В таблице цен Firebase FCM отмечен как бесплатный: он доступен на тарифе Spark без платёжного метода и входит в бесплатные лимиты тарифа Blaze с оплатой по факту использования. Бесплатная отправка не отменяет квот и платы за соседние сервисы Firebase и Google Cloud, если проект их использует.
| Уровень | Лимит | Условие |
|---|---|---|
| Проект, HTTP v1 | 600 тыс. сообщений в минуту по умолчанию | Считаются сообщения, а не запросы, и ошибки 400–499 кроме 429 тоже. При превышении приходит ответ 429 RESOURCE_EXHAUSTED до пополнения квоты на следующей минуте. Повышение можно запросить, одобрение не гарантировано |
| Одно устройство на Android | 240 сообщений в минуту и 5000 в час | Лимит действует для каждого устройства отдельно, а не на проект |
Типы сообщений FCM, notification и data
FCM поддерживает два типа сообщений. Notification-сообщение несёт предопределённые видимые ключи, например заголовок и текст: в фоне его показывает FCM SDK, на переднем плане поведение определяет код приложения. Data-сообщение содержит только пользовательские пары «ключ — значение», и обрабатывает его код приложения. Notification достаточно для стандартного видимого push, а data нужен, когда за показ и содержимое отвечает код приложения: он сам решает, показывать ли уведомление и какое именно.
Тестируйте каждое сообщение дважды: при приложении в фоне и на переднем плане.
| Признак | Notification | Data |
|---|---|---|
| Кто обрабатывает | FCM SDK, если приложение в фоне; на переднем плане поведение определяет код приложения | Код приложения |
| Содержимое | Предопределённые видимые ключи и необязательные данные | Только пользовательские пары «ключ — значение» |
| Предельный размер | 4096 байт, для сообщений в топик 2048 байт, из консоли Firebase 1000 символов | 4096 байт, для сообщений в топик 2048 байт, из консоли Firebase 1000 символов |
Токены, топики и группы устройств
Адресовать сообщение можно устройству по FID или токену, подписчикам топика (тематической группы, на которую подписываются экземпляры приложения) или группе устройств. От выбора зависят задержка и лимиты, а группы устройств Google объявил устаревшими.
Жизненный цикл токена на устройстве
FCM адресует экземпляр приложения на устройстве по его регистрации. Долгое время для этого служил токен регистрации, но в июне 2026 года Firebase начал переход на идентификатор установки Firebase (FID): в Android SDK Cloud Messaging 25.1.0 методы getToken, deleteToken и onNewToken объявлены устаревшими, а в документации Admin SDK отправка по FID отмечена как рекомендуемая. Регистрация считается устаревшей, если устройство больше месяца не подключалось к FCM. Отправки на неё вряд ли дойдут, а в консоли Firebase и в выгрузке в BigQuery это выглядит как резкое, но ненастоящее падение доставки. На Android регистрация, неактивная 270 дней, считается истёкшей, и сообщения на неё отклоняются.
На iOS и других платформах такого срока нет, поэтому управление регистрациями лежит на сервере приложения: он должен сам удалять устаревшие регистрации.
Хорошая практика — сохранять токен или FID вместе с отметкой времени при каждой загрузке: по ней сервер понимает, какие регистрации пора удалять.
Топики и отключение групп устройств
Топики оптимизированы под пропускную способность, а не под задержку, поэтому для быстрой доставки отдельным устройствам нужны FID или токены. Подписчиков у топика может быть неограниченно, экземпляр приложения подписывается не больше чем на 2000 топиков, пакетная подписка принимает до 1000 экземпляров на запрос, а добавление и удаление подписок ограничено 3000 запросов в секунду на проект.
Группы устройств и серверные API Instance ID, которые отдают сведения о токене, подписывают на топики и импортируют токены пакетом, будут отключены 29 сентября 2027 года. Топики не заменяют группы напрямую. Миграция выглядит так: храните соответствие «группа — токены» у себя и отправляйте каждому токену отдельный запрос HTTP v1. Проверьте заранее, использует ли ваш проект группы устройств и эти API. Если да, запланируйте перенос на HTTP v1 и новый серверный API подписки на топики.
| Способ | Когда подходит | Статус |
|---|---|---|
| Токен или FID | Быстрая доставка отдельному устройству | Основной способ; новые версии SDK выдают FID, идентификаторы хранят и чистят на сервере |
| Топик | Массовая рассылка подписчикам | Оптимизирован под пропускную способность, не под задержку |
| Группа устройств | Нет рекомендованных сценариев | Устарела, отключение запланировано |
Срок жизни сообщения и причины недоставки уведомления
Срок жизни сообщения (TTL, time to live) на Android и в web задаётся от 0 до 2 419 200 секунд, то есть до 28 дней, а по умолчанию сообщение живёт максимум четыре недели. При ttl=0 недоставленное сразу сообщение отбрасывается. На iOS срок задаёт заголовок apns-expiration.
Если устройство не подключено, FCM хранит сообщение до подключения или до истечения срока. На Android при отсутствии связи больше месяца сообщение принимается, но сразу отбрасывается. Если приложение удалено, FCM аннулирует токен, и дальше сервер получает ошибку UNREGISTERED (HTTP 404; в старых API она называлась NotRegistered).
Если задан collapse_key и в очереди уже есть сообщение с тем же ключом для того же токена, старое заменяется новым, без ключа остаются оба. Приоритет normal может задержать доставку для фонового приложения. Приоритет high заставляет FCM пытаться доставить сообщение сразу, даже когда устройство в режиме энергосбережения Doze, и подходит для срочного видимого содержимого.

Что проверить, если push не пришёл
Один симптом даёт несколько причин, поэтому проверяйте их по очереди.
Частые причины недоставки:
- На Android 13 и выше не выдано разрешение POST_NOTIFICATIONS.
- Приложение удалено, токен аннулирован.
- Устройство больше месяца не подключалось к FCM.
- Регистрация на Android неактивна 270 дней.
- Истёк срок жизни сообщения или задан ttl=0.
- Задан приоритет normal, а устройство в режиме Doze: сообщение ждёт выхода из Doze и приходит с задержкой.
- Превышена квота проекта (ответ 429) или лимит одного устройства.
- На Android нет Google Play services.
Работает ли FCM в России и какие есть альтернативы
В июне 2026 года Anti-Malware.ru сообщал, что на Android доставку уведомлений обеспечивает FCM, а на iPhone — APNs, и, по оценке директора департамента расследований T.Hunter Игоря Бедерова, инфраструктура обоих сервисов уже длительное время сталкивается с ограничениями на сетях российских операторов. Из-за этого, по его словам, у пользователей в России пропадают уведомления Telegram, когда приложение выгружено из памяти. Это оценка эксперта, а не заявление Google, поэтому доставку на российской аудитории проверяют на собственном приложении по отчётам FCM и мониторингу.
RuStore Push — собственный сервис отправки push в магазине приложений RuStore, альтернатива FCM. Основное приложение-посредник здесь сам RuStore. Если его нет или оно недоступно, доставку обеспечивают другие приложения экосистемы VK, дистрибьюторы, и пользователь должен авторизоваться в приложении-дистрибьюторе. Universal Push SDK позволяет использовать RuStore, FCM и HMS (сервисы Huawei) одновременно и переключаться между ними.
Решение о канале зависит от аудитории: FCM остаётся основным каналом для Android с сервисами Google, а для Android-аудитории в России стоит заложить мультиканальную отправку через Universal Push SDK. RuStore Push работает только на Android, на iPhone уведомления по-прежнему идут через APNs. Сравнить каналы глубже помогут материалы блога про RuStore и альтернативы Google Play для Android.

Метрики FCM и кейс push в триггерных рассылках
Панель отчётов FCM показывает число отправленных и открытых сообщений на Apple и Android, а на Android ещё и показы. Конверсии она не фиксирует: для них нужны события аналитики приложения.
По отчёту Airship за 2025 год, где медианы считались по приложениям её клиентов по всему миру, согласие на push (opt-in) на Android составило 53,3 %, а на iOS — 48,85 %. Разрыв меньше пяти процентных пунктов, и отчёт связывает такое сближение с повсеместным переходом на Android 13+.
Показательный пример — кейс Kokoc для сети Street Beat. Специалисты Out of Cloud разбили базу на 9 групп, запустили 12 новых триггерных цепочек, настроили работу с оттоком, протестировали SMS и очистили базу для доставляемости. Выручка по всем триггерным коммуникациям (email, push, SMS) в апреле 2025 года выросла на 388 % к апрелю 2024-го, по триггерным email — на 99 %. Выручка считалась по атрибуции last click с окном 14 дней в Mindbox, платформе клиентских данных. Результат дал весь комплекс работ: вклад push кейс не отделяет, а FCM в нём не упоминается.
FAQ по Firebase Cloud Messaging
Как проверить токен, не отправляя сообщение пользователю?
В запросе HTTP v1 send задайте параметр validate_only=true: запрос пройдёт проверку в FCM, но сообщение не будет доставлено. Этот способ заменяет проверку токена через Instance ID API, который объявлен устаревшим.
Что происходит на iOS при превышении лимитов?
При превышении лимитов APNs FCM возвращает ошибку. Эти лимиты задаёт транспортный уровень Apple, а не FCM, поэтому лимит на одно устройство, 240 сообщений в минуту и 5000 в час, документация называет только для Android.
Может ли токен измениться и кто им управляет?
Да. На Android идентификатор установки Firebase (FID) меняется, когда приложение восстанавливают на новом устройстве, переустанавливают или очищают его данные. Этим идентификатором управляет сервис Firebase Installations, а не FCM. FCM SDK сам отслеживает смену и передаёт приложению новое значение, а сервер заменяет старую запись новой.
Коротко о главном
- FCM принимает сообщение к доставке, но показ зависит от токена или FID, срока жизни, типа и приоритета сообщения и состояния устройства.
- Сообщение проходит четыре звена от сервера до FCM SDK на устройстве.
- Рабочая отправка идёт через Admin SDK или HTTP v1 API, а notification в фоне показывает FCM SDK, data обрабатывает код приложения.
- Токены или FID хранят с отметкой времени, группы устройств и серверные API Instance ID отключат 29 сентября 2027 года.
- Причину недоставки ищут по списку: разрешение, токен, срок жизни, приоритет, квоты.
- Для российской аудитории рассматривают RuStore Push и Universal Push SDK как дополнение к FCM.


Комментарии
Комментариев пока нет. Будьте первым!
Оставить комментарий