← Назад к вопросам

Что такое Firebase Cloud Messaging (FCM)?

2.0 Middle🔥 121 комментариев
#Сетевое взаимодействие

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Firebase Cloud Messaging (FCM)?

Firebase Cloud Messaging (FCM) — это кроссплатформенный сервис для обмена сообщениями, предоставляемый Google в рамках платформы Firebase. Он позволяет надежно и эффективно доставлять сообщения на устройства под управлением Android, iOS и в веб—браузеры. По сути, FCM является развитием и заменой более старого сервиса Google Cloud Messaging (GCM). Его главная цель — упростить для разработчиков реализацию функций push-уведомлений в приложениях, предоставляя бесплатный, масштабируемый и безопасный бекенд.

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

FCM предлагает богатый набор функций, которые делают его основным выбором для многих разработчиков:

  • Кроссплатформенная доставка: Один API для отправки уведомлений на Android, iOS, Web (и даже Unity).
  • Два типа сообщений:
    *   **Уведомления для отображения (Notification messages):** Сообщения с предопределенными полями (заголовок, текст, иконка). Система устройства автоматически обрабатывает их отображение, когда приложение находится в **фоне (background)** или **закрыто (killed)**.
    *   **Сообщения с данными (Data messages):** Произвольные пары ключ-значение (до 4 КБ). Они всегда доставляются в приложение, которое должно обработать их логику самостоятельно. Используются, когда приложение находится на **переднем плане (foreground)** или для передачи специфичных данных.
  • Таргетирование: Отправка сообщений отдельным устройствам (по токену регистрации), группам устройств (по topics, например, /news/sports) или сегментам пользователей (по условиям в Firebase Analytics).
  • Надежность и масштабируемость: Использует инфраструктуру Google, обеспечивая высокую доступность и возможность отправки миллионов сообщений в день.
  • Интеграция с аналитикой: Автоматически отслеживает доставку, открытия и взаимодействия с уведомлениями в Firebase Analytics, помогая оценивать эффективность кампаний.

Базовая архитектура и поток данных

Работу FCM можно представить в виде следующей последовательности:

  1. Регистрация устройства: Приложение при первом запуске запрашивает у сервисов Google Play (на Android) уникальный токен регистрации (FCM Registration Token). Этот токен идентифицирует конкретное устройство и экземпляр приложения.
    // Пример получения токена в Android (Kotlin)
    FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val token = task.result
            // Отправить этот токен на ваш сервер
        }
    }
    
  2. Передача токена на ваш сервер: Полученный токен приложение отправляет на ваш бекенд-сервер (например, Node.js, Python, Java), где он сохраняется в базе данных.
  3. Инициация отправки: Ваш сервер решает отправить уведомление. Для этого он формирует HTTP-запрос к FCM HTTPS API или использует Admin SDK для Firebase.
    // Пример отправки через Admin SDK (Node.js)
    const message = {
        notification: {
            title: 'Новое сообщение!',
            body: 'Вам пришло новое сообщение от друга.'
        },
        token: deviceRegistrationToken // токен, сохраненный ранее
    };
    admin.messaging().send(message).then((response) => {
        console.log('Успешно отправлено:', response);
    });
    
  4. Доставка через FCM: Серверы FCM получают запрос, находят целевое устройство по токену и пересылают сообщение через постоянное соединение (используя MQTT или аналогичный протокол), которое поддерживает Google Play Services на устройстве.
  5. Получение на устройстве: На стороне приложения вы реализуете сервис, расширяющий FirebaseMessagingService, для обработки входящих сообщений.
    class MyFirebaseMessagingService : FirebaseMessagingService() {
        override fun onMessageReceived(remoteMessage: RemoteMessage) {
            // Обработка data-сообщения, когда приложение в foreground
            remoteMessage.data.let { data ->
                Log.d(TAG, "Данные: $data")
            }
            // Уведомление для отображения (notification) будет показано системой автоматически,
            // если приложение в background. Его также можно обработать здесь.
        }
    
        override fun onNewToken(token: String) {
            // Важно: токен периодически обновляется. Этот метод вызывается при этом.
            // Необходимо отправить новый токен на ваш сервер.
        }
    }
    

Важные аспекты для Android-разработчика

  • Состояние приложения: Поведение при получении сообщения критически зависит от того, находится ли приложение в foreground или background/killed. Для notification-сообщений в background системный трей будет показан автоматически. Data-сообщения всегда попадают в onMessageReceived.
  • Обновление токена: Токен регистрации может меняться после обновления приложения, восстановления устройства или при ручной отзыве. Всегда реализуйте onNewToken для его актуализации на сервере.
  • Приоритет сообщений: FCM позволяет задавать приоритет (high или normal). high используется для мгновенных уведомлений, требующих пробуждения устройства, но должен применяться осмотрительно для сохранения заряда батареи.
  • Время жизни сообщения (TTL): Можно установить максимальный срок (до 4 недель), в течение которого FCM будет пытаться доставить сообщение, если устройство офлайн.
  • Безопасность: Хотя FCM обеспечивает шифрование передачи, для конфиденциальных данных лучше использовать data-sсообщения и дополнительное шифрование на уровне приложения. Управление токенами на сервере также должно быть защищено.

Заключение

Firebase Cloud Messaging — это мощный и удобный инструмент, который избавляет разработчика от необходимости создавать и поддерживать сложную инфраструктуру для push. Для Android-приложений он тесно интегрирован с экосистемой Google, что обеспечивает стабильную доставку. Понимание различий между типами сообщений, жизненного цикла токена и поведения в разных состояниях приложения является фундаментальным для его эффективного и корректного использования.

Что такое Firebase Cloud Messaging (FCM)? | PrepBro