Firebase Cloud Messaging: что это, принцип работы и push-уведомления

Автор: IT Sectr Опубликовано: 2026-04-29 Время чтения: 9 мин

Firebase Cloud Messaging (FCM) — это кроссплатформенный сервис доставки push-уведомлений и сообщений от Google, предназначенный для мобильных и веб-приложений. FCM обеспечивает надёжную передачу данных между сервером и клиентскими устройствами без необходимости поддерживать постоянное сетевое соединение. По данным Firebase Documentation, 2026, через инфраструктуру FCM ежедневно проходит более 300 миллиардов сообщений по всему миру. Сервис поддерживает как уведомления с автоматическим отображением, так и data-сообщения для скрытой передачи данных в фоне.

Главное

  • FCM — бесплатный сервис push-уведомлений от Google с поддержкой Android, iOS и Web через единый API и Firebase Console.
  • Типы сообщений — notification-сообщения отображаются автоматически системой, data-сообщения позволяют отправлять произвольный JSON и обрабатывать его в приложении.
  • Токены устройств — каждое приложение получает уникальный Registration Token, который используется сервером для адресной отправки push-уведомлений.
  • Приоритеты доставки — normal и high приоритеты определяют поведение системы при экономии заряда: high-сообщения пробуждают устройство из Doze-режима.
  • Топики и группы — FCM поддерживает подписку на топики для массовой рассылки и Device Groups для отправки на несколько устройств одного пользователя.

Что такое Firebase Cloud Messaging

Firebase Cloud Messaging — это облачный сервис Google, который обеспечивает передачу push-уведомлений и data-сообщений между сервером приложения и клиентскими устройствами. Сервис заменил устаревший Google Cloud Messaging (GCM) и стал стандартным решением для доставки push в экосистеме Firebase. FCM поддерживает Android, iOS, Web и Unity, обеспечивая единый интерфейс отправки независимо от целевой платформы.

Ключевые возможности FCM

Сервис предоставляет несколько механизмов доставки сообщений, каждый из которых решает свою задачу. Notification-сообщения отображаются системой автоматически при получении — разработчику не нужно писать код для показа уведомления. Data-сообщения передают произвольный payload в виде пар ключ-значение и обрабатываются внутри приложения. Комбинированные сообщения содержат одновременно видимую и скрытую части для максимальной гибкости.

Преимущества перед собственным решением

Реализация собственного push-сервера требует постоянного поддержания TCP-соединения с каждым устройством, что неэффективно и небезопасно. FCM использует единую инфраструктуру Google, которая поддерживает соединение с миллиардами устройств одновременно. Сервис автоматически управляет повторными попытками доставки, очередями сообщений и балансировкой нагрузки, освобождая разработчика от необходимости решать эти задачи самостоятельно.

Как работает Firebase Cloud Messaging

Архитектура FCM состоит из трёх ключевых компонентов: сервер провайдера (ваш backend), сервер Firebase Cloud Messaging и клиентское приложение на устройстве. Когда сервер отправляет сообщение, оно сначала попадает в инфраструктуру FCM, которая маршрутизирует его на целевое устройство. Если устройство офлайн, FCM хранит сообщение в очереди и доставляет его при восстановлении соединения.

Регистрация устройства и получение токена

При первом запуске приложение вызывает Firebase SDK, который регистрирует устройство в сервисе FCM и получает уникальный Registration Token. Этот токен представляет собой строку длиной около 150 символов и идентифицирует конкретный экземпляр приложения на конкретном устройстве. Токен может меняться при переустановке приложения, очистке данных или восстановлении из бэкапа — разработчик должен обрабатывать обновление токена через делегат onNewToken.

Жизненный цикл сообщения

Когда сервер отправляет запрос через FCM API, сообщение проходит через несколько этапов. Приём и валидация — FCM проверяет корректность запроса и наличие целевого устройства. Очередь — если устройство недоступно, сообщение попадает в очередь хранения. Маршрутизация — FCM определяет оптимальный канал доставки (Wifi или сотовые данные). Доставка — система передаёт сообщение целевому приложению. После успешной доставки FCM возвращает серверу идентификатор сообщения.

Типы сообщений в FCM

Firebase Cloud Messaging поддерживает три типа сообщений, каждый из которых имеет свои особенности обработки на клиентской стороне. Notification-сообщения обрабатываются системным сервисом Google Play Services в Android и APNs в iOS и автоматически отображаются в виде push-баннеров. Data-сообщения передаются непосредственно в приложение и обрабатываются через callback onMessageReceived в Android и application(_:didReceiveRemoteNotification:) в iOS.

Notification-сообщения

Notification-сообщение содержит предопределённые поля: title, body, image URL и звук уведомления. Система автоматически создаёт и отображает уведомление в системном tray, даже если приложение находится в фоне или убито. Пользователь видит стандартный баннер с заголовком и текстом, а при нажатии приложение открывается с переданными в payload данными. Если приложение активно, notification-сообщение можно перехватить и обработать в коде.

Data-сообщения

Data-сообщение — это кастомный набор пар ключ-значение без предопределённых полей. Payload не обрабатывается системой автоматически — приложение получает сырые данные и может интерпретировать их произвольным образом. Data-сообщения используются для синхронизации данных в фоне, обновления локального кэша, триггера синхронизации или передачи команд без отображения уведомления. В Android data-сообщение доставляется всегда, даже если приложение убито или в фоне.

Комбинированные сообщения

FCM позволяет отправлять сообщение, которое содержит одновременно notification-часть (для отображения) и data-часть (для обработки). Комбинированный payload включает как предопределённые поля notification, так и произвольные ключи data. Система отображает уведомление из notification-части, а data-часть передаётся в intent extras приложения при открытии. Это удобно для сценариев, где нужно показать пользователю уведомление и одновременно передать контекст для перехода на конкретный экран.

ТипАвто-отображениеОбработка в фонеПример
NotificationДа, системойАвтоматически, без кодаПриветственное push-уведомление
DataНетЧерез callback приложенияСинхронизация данных в фоне
КомбинированноеДа, notification-частьData-часть при открытииУведомление + ссылка на заказ

Настройка FCM в Android

Интеграция FCM в Android начинается с подключения Firebase SDK через файл build.gradle на уровне приложения. После добавления зависимостей и файла google-services.json приложение автоматически получает Registration Token, который передаётся через callback FirebaseMessagingService. Для приёма уведомлений необходимо создать сервис, наследующий FirebaseMessagingService, и зарегистрировать его в AndroidManifest.xml.

Инициализация и получение токена

После подключения SDK Firebase автоматически генерирует токен устройства без дополнительного кода. Токен доступен через FirebaseMessaging.getInstance().token, который возвращает Task. Для отслеживания обновлений токена переопределяется метод onNewToken в сервисе. Токен необходимо передать на сервер провайдера, чтобы сервер мог отправлять push-уведомления на это устройство.

kotlin
class MyFirebaseMessagingService :
    FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendTokenToServer(token)
    }

    override fun onMessageReceived(
        message: RemoteMessage
    ) {
        val data = message.data
        val title = "Новое сообщение"
        val body = data["body"] ?: ""
        showNotification(title, body)
    }
}

Регистрация сервиса в манифесте

Сервис для приёма FCM-сообщений необходимо зарегистрировать в AndroidManifest.xml с соответствующими intent-filter. Добавление тега service с разрешением INTERNET и указанием action. Без регистрации сервиса сообщения не будут доставляться приложению в фоновом режиме. Для отображения уведомлений в Android 13+ требуется runtime-пермишен POST_NOTIFICATIONS.

xml
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
    "android.permission.POST_NOTIFICATIONS" />

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name=
            "com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Настройка FCM в iOS

Интеграция FCM в iOS требует настройки как на стороне Apple Push Notification Service (APNs), так и в Firebase Console. В отличие от Android, где FCM управляет соединением напрямую, в iOS FCM использует APNs как транспортный слой. Приложение регистрируется на получение push-уведомлений через UIApplication.shared.registerForRemoteNotifications, а Firebase SDK перехватывает полученный device token и связывает его с FCM Registration Token.

Настройка APNs и регистрация на уведомления

Для работы FCM в iOS необходимо загрузить APNs-ключ или сертификат в Firebase Console. APNs-ключ — это современный способ аутентификации без сертификатов (рекомендуется Apple). Ключ создаётся в Apple Developer Portal в разделе Keys и загружается в настройки Cloud Messaging в Firebase Console. После настройки APNs приложение запрашивает разрешение на уведомления через UNUserNotificationCenter и регистрируется через APNs.

swift
import Firebase
import UserNotifications

class AppDelegate: NSObject, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions
        launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        UNUserNotificationCenter.current()
            .requestAuthorization(options: [.alert, .sound, .badge])
        application.registerForRemoteNotifications()
        return true
    }

    func application(
        _ application: UIApplication,
        didRegisterForRemoteNotificationsWithDeviceToken
        deviceToken: Data
    ) {
        Messaging.messaging()
            .apnsToken = deviceToken
    }
}

Обработка входящих уведомлений

Для обработки полученных уведомлений реализуется делегат UNUserNotificationCenter. Метод willPresent вызывается, когда уведомление получено при активном приложении — здесь можно показать кастомную in-app нотификацию или проигнорировать системный баннер. Метод didReceive вызывается, когда пользователь нажимает на уведомление — здесь выполняется переход на соответствующий экран. Для data-сообщений используется делегат MessagingDelegate, который получает payload при получении FCM-сообщения в фоне.

Отправка сообщений с сервера

Серверная отправка FCM-сообщений выполняется через HTTP v1 API Firebase Cloud Messaging или устаревший Firebase Cloud Messaging API. HTTP v1 API является рекомендуемым способом, использует OAuth 2.0 аутентификацию через Service Account и поддерживает все современные возможности FCM, включая аналитику доставки и A/B-тестирование уведомлений. Запрос отправляется POST-методом на endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.

Формат запроса HTTP v1

Тело запроса содержит JSON-объект с информацией о сообщении: target (токен, топик или условие), notification (для отображения) и data (кастомный payload). Аутентификация через Service Account JSON-ключа, который загружается в переменные окружения сервера. Токен доступа генерируется через библиотеку google-auth-library. Google рекомендует использовать Firebase Admin SDK для автоматического управления аутентификацией и повторными попытками.

js
const admin = require("firebase-admin")

const serviceAccount = require("./serviceAccountKey.json")

admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })

const message = {
    token: "device_registration_token",
    notification: { title: "Скидка 20%", body: "На все услуги сегодня" },
    data: { screen: "promo", promoId: "324" },
    android: { priority: "high" },
    apns: { payload: { aps: { sound: "default" } } }
}

admin.messaging().send(message)
    .then(response => {
        console.log("Успешно отправлено:", response)
    })
    .catch(error => {
        console.log("Ошибка отправки:", error)
    })

Топики и массовая рассылка

Для отправки уведомлений группе пользователей FCM поддерживает подписку на топики. Топик (topic) — это именованный канал, на который клиентское приложение подписывается через FirebaseMessaging.getInstance().subscribeToTopic(). Сервер может отправить сообщение на топик, и оно будет доставлено всем подписанным устройствам. Топики подходят для новостных рассылок, уведомлений об акциях и событийных push. Для более точной сегментации используются условия (conditions) на основе нескольких топиков с логическими операторами.

Часто задаваемые вопросы

В чём разница между FCM и APNs?

FCM работает на Android через собственную инфраструктуру Google, а на iOS использует APNs как транспортный протокол. FCM предоставляет единый API для обеих платформ, автоматическое хранение сообщений в офлайне и аналитику доставки, чего нет в чистом APNs.

Можно ли отправлять FCM-сообщения без сервера?

Да, через Firebase Console в разделе Cloud Messaging можно отправлять уведомления вручную на выбранные устройства, топики или сегменты аудитории. Функция подходит для тестирования и разовых рассылок, но не заменяет серверную интеграцию для production-приложений.

Что делать, если токен устройства изменился?

Подпишитесь на обновления токена через onNewToken в FirebaseMessagingService (Android) или MessagingDelegate (iOS). При изменении токена отправьте новый токен на сервер и удалите старый. Сервер должен обновить базу данных и прекратить попытки отправки на устаревший токен.

Как FCM обрабатывает офлайн-устройства?

FCM хранит сообщение в очереди до 28 дней и доставляет его при восстановлении соединения. Для notification-сообщений коллапсируется только последнее сообщение для каждой коллапс-группы. Data-сообщения хранятся отдельно и доставляются в порядке отправки без коллапса.

Сколько стоит использование Firebase Cloud Messaging?

FCM полностью бесплатен без ограничений на количество сообщений. Использование FCM не тарифицируется ни в рамках плана Spark, ни в плане Blaze. Ограничения есть только на размер payload: до 4 KB для notification-сообщений и до 2 KB для data-сообщений.

Итоги

  • Firebase Cloud Messaging — кроссплатформенный сервис push-уведомлений от Google, поддерживающий Android, iOS, Web и Unity через единый API.
  • Архитектура FCM состоит из сервера провайдера, инфраструктуры Firebase и клиентского приложения, обеспечивая надёжную доставку сообщений через глобальную сеть Google.
  • Три типа сообщений — notification (авто-отображение), data (произвольный payload без UI) и комбинированные (оба типа в одном сообщении).
  • FCM в Android работает через FirebaseMessagingService с собственным соединением, а в iOS использует APNs как транспорт с перехватом токена через MessagingDelegate.
  • HTTP v1 API рекомендуется для серверной отправки с OAuth 2.0 аутентификацией через Service Account и поддержкой аналитики доставки.
  • Топики позволяют отправлять сообщения группам подписчиков, а условия (conditions) — комбинировать несколько топиков для точной сегментации.
  • FCM бесплатен без ограничения на количество сообщений, с хранением офлайн-сообщений до 28 дней и максимальным размером payload 4 KB.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также