Firebase Cloud Messaging
Firebase Cloud Messaging (FCM) — это кроссплатформенное облачное решение для отправки push-уведомлений и передачи данных между сервером приложений и клиентскими устройствами (мобильными приложениями на Android и iOS, веб-приложениями, а также приложениями для платформы Flutter). Разработано компанией Google, является преемником сервиса Google Cloud Messaging (GCM). FCM обеспечивает надёжную, масштабируемую и бесплатную доставку сообщений, используя инфраструктуру Google Cloud Platform.
История
Сервис Firebase Cloud Messaging был запущен в 2016 году как часть платформы Firebase, приобретённой Google в 2014 году. Он пришёл на смену Google Cloud Messaging (GCM), который был представлен в 2010 году. Основные причины перехода на FCM включали упрощение интеграции, улучшенную поддержку разных платформ и более гибкую модель доставки сообщений.
В 2018 году Google объявила о прекращении поддержки GCM, полностью переведя всех разработчиков на FCM. С этого момента FCM стал единственным официальным облачным сервисом Google для push-уведомлений на Android. В 2020 году была выпущена версия FCM для платформы Flutter, что позволило разработчикам отправлять уведомления в приложения, созданные с помощью этого фреймворка.
Архитектура и принцип работы
Архитектура FCM состоит из трёх основных компонентов:
- Сервер приложений — серверная часть разработчика, которая инициирует отправку сообщений через API FCM.
- Сервер FCM — облачная инфраструктура Google, отвечающая за маршрутизацию и доставку сообщений.
- Клиентское приложение — приложение на устройстве пользователя, которое регистрируется в FCM и получает сообщения.
Процесс доставки сообщения включает несколько этапов:
- Регистрация клиента: При первом запуске приложение получает от FCM уникальный идентификатор — регистрационный токен (Registration Token). Этот токен связывает приложение с конкретным устройством.
- Отправка сообщения: Сервер приложений отправляет запрос к API FCM, указывая регистрационный токен получателя (или группу токенов) и содержимое сообщения.
- Маршрутизация: FCM находит устройство, соответствующее токену, и доставляет сообщение. Если устройство офлайн, сообщение может быть сохранено в очереди и доставлено при повторном подключении.
- Получение и обработка: Клиентское приложение получает сообщение и обрабатывает его (например, отображает уведомление в системной панели или запускает фоновый код).
Типы сообщений
FCM поддерживает два основных типа сообщений:
Уведомления (Notification Messages)
Сообщения этого типа содержат предопределённые поля (заголовок, текст, значок, звук) и автоматически отображаются системой в виде push-уведомления. Они не требуют обработки в коде приложения — система сама показывает уведомление, если приложение находится в фоне. Если приложение активно, уведомление передаётся в обработчик приложения.
Сообщения с данными (Data Messages)
Сообщения этого типа содержат произвольные пользовательские данные (в формате ключ-значение). Они не отображаются автоматически — приложение должно обработать их в коде (например, обновить интерфейс, выполнить фоновую задачу или показать кастомное уведомление). Сообщения с данными всегда доставляются приложению, даже если оно находится в фоне.
Комбинированные сообщения
Можно отправлять сообщения, которые содержат как уведомление, так и данные. В этом случае уведомление отображается системой, а данные передаются приложению для дополнительной обработки.
Способы доставки
FCM предоставляет несколько способов отправки сообщений:
- Одиночная отправка: Сообщение отправляется одному конкретному устройству по его регистрационному токену.
- Групповая отправка: Сообщение отправляется группе устройств, объединённых по теме (Topic) или по группе устройств (Device Group). Топики — это простой способ подписки пользователей на определённые категории уведомлений (например, «новости», «акции»).
- Отправка по сегментам: Используя Firebase Analytics, можно отправлять сообщения определённым сегментам пользователей (например, «пользователи из Москвы» или «пользователи, совершившие покупку за последний месяц»).
- Отправка по условиям: Сообщение отправляется устройствам, соответствующим заданному логическому условию (например, «TopicA && TopicB || TopicC»).
API и интеграция
FCM предоставляет REST API и SDK для различных платформ. Основные методы API:
- POST /v1/projects/{project_id}/messages:send — отправка сообщения.
- POST /v1/projects/{project_id}/messages:sendAll — отправка нескольких сообщений в одном запросе.
- POST /v1/projects/{project_id}/topics:subscribe — подписка устройства на топик.
- POST /v1/projects/{project_id}/topics:unsubscribe — отписка устройства от топика.
SDK доступны для платформ Android, iOS (включая Swift), веб-приложений (JavaScript) и Flutter. Для серверной части Google предоставляет библиотеки для Node.js, Python, Java, Go и C#.
Безопасность и аутентификация
Для отправки сообщений сервер приложений должен пройти аутентификацию в FCM. Используется два основных метода:
- OAuth 2.0 — рекомендуется для продакшн-сред. Сервер получает токен доступа от Google Cloud IAM и передаёт его в заголовке Authorization.
- Ключ сервера (Server Key) — устаревший метод, который использует статический ключ, полученный в консоли Firebase.
Клиентские приложения аутентифицируются с помощью секретного ключа приложения (App Secret) или через Firebase Authentication.
Ограничения и лимиты
FCM имеет ряд ограничений, которые необходимо учитывать при разработке:
- Максимальный размер сообщения: 4 КБ (для уведомлений) и 2 КБ (для сообщений с данными).
- Максимальная частота отправки: 600 сообщений в секунду на один проект (по умолчанию).
- Максимальное количество подписчиков на топик: 10 000 000.
- Максимальное время жизни сообщения (TTL): 28 дней. Сообщения, не доставленные за это время, удаляются.
- Очередь офлайн-сообщений: FCM хранит до 100 сообщений для одного устройства, если оно офлайн. При превышении лимита старые сообщения удаляются.
Применение
Firebase Cloud Messaging широко используется в мобильных и веб-приложениях для:
- Push-уведомлений: Информирование пользователей о новых сообщениях, обновлениях, акциях, напоминаниях.
- Фоновой синхронизации данных: Обновление контента приложения (например, загрузка новых статей или обновление ленты) без участия пользователя.
- Чат-приложений: Доставка сообщений в реальном времени.
- Маркетинговых кампаний: Отправка целевых уведомлений на основе поведения пользователей.
- Управления IoT-устройствами: Отправка команд на устройства, работающие на Android Things.
Преимущества и недостатки
Преимущества
- Бесплатность: FCM не взимает плату за отправку сообщений, что делает его доступным для проектов любого масштаба.
- Масштабируемость: Инфраструктура Google автоматически обрабатывает миллиарды сообщений в день.
- Кроссплатформенность: Единый API для Android, iOS и веба.
- Интеграция с Firebase: Лёгкая интеграция с другими сервисами Firebase (Analytics, Cloud Functions, Firestore).
- Гибкая доставка: Поддержка топиков, сегментов, условий и офлайн-очередей.
Недостатки
- Зависимость от Google: Сервис полностью привязан к экосистеме Google, что может быть проблемой для устройств без сервисов Google (например, в Китае).
- Ограничения на размер сообщений: 4 КБ — это мало для передачи больших объёмов данных.
- Задержки доставки: Время доставки может варьироваться в зависимости от нагрузки и состояния сети.
- Отсутствие гарантии доставки: FCM не гарантирует 100% доставку сообщений, особенно при офлайн-режиме.
Сравнение с альтернативами
FCM является одним из самых популярных сервисов push-уведомлений, но существуют и альтернативы:
- Apple Push Notification Service (APNs): Собственный сервис Apple для iOS. В отличие от FCM, APNs работает только на устройствах Apple и требует отдельной настройки.
- Amazon Simple Notification Service (SNS): Облачный сервис от Amazon Web Services, поддерживающий отправку уведомлений на Android, iOS и другие платформы.
- Pushover: Платный сервис для отправки push-уведомлений на мобильные устройства.
- OneSignal: Сторонний сервис, предоставляющий push-уведомления для Android, iOS и веба. OneSignal использует FCM и APNs в качестве бэкенда.
Интересные факты
- FCM обрабатывает более 1 миллиарда сообщений в день по всему миру.
- FCM поддерживает отправку сообщений не только на мобильные устройства, но и на веб-браузеры (через Service Workers).
- В 2023 году Google объявила о планах по интеграции FCM с Google Cloud Pub/Sub для улучшения масштабируемости.
- FCM используется в таких крупных приложениях, как YouTube, Google Maps, Gmail и многих других.
Источники
- Документация Firebase Cloud Messaging (Google)
- Firebase Console — официальный сайт
- Статья «Firebase Cloud Messaging: An Overview» (Medium, 2020)
- Руководство по миграции с GCM на FCM (Google Developers)
- Сравнение push-сервисов: FCM vs APNs vs OneSignal (Habr, 2021)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →