FCM (Firebase Cloud Messaging) — это кроссплатформенный сервис от Google для доставки push-уведомлений и передачи данных между сервером и мобильными приложениями. Он поддерживает Android, iOS и веб-платформы через единый API. По данным Firebase Documentation, FCM обрабатывает более 1 миллиарда сообщений ежедневно по всему миру.
Главное
Firebase Cloud Messaging (FCM) — это облачный сервис от Google, который обеспечивает надёжную доставку push-уведомлений и сообщений с данными на мобильные устройства. Ранее известный как Google Cloud Messaging (GCM), FCM стал основным инструментом для кроссплатформенных уведомлений в экосистеме Firebase.
FCM автоматически выбирает оптимальный канал доставки в зависимости от платформы: на Android используется собственное FCM-соединение, на iOS — APNS (через шлюз FCM). Разработчику не нужно реализовывать две разные интеграции — FCM берёт на себя маршрутизацию.
Сервис предоставляет единый REST API и Admin SDK для отправки сообщений. Это позволяет отправлять уведомления с серверной части без привязки к конкретной платформе получателя.
FCM поддерживает несколько режимов доставки: одно сообщение конкретному устройству, групповая рассылка по теме (topic) и сегментная отправка по условиям (condition). Также доступно планирование отправки и A/B-тестирование содержания уведомлений.
Архитектура FCM основана на трёх компонентах: клиентское приложение, Firebase Connection Server и сервер приложения (app server). Клиент регистрируется в FCM при запуске и получает уникальный регистрационный токен — строку, идентифицирующую устройство для данного приложения.
Сервер приложения отправляет запрос к FCM REST API, указывая токен получателя или топик. Firebase Connection Server доставляет сообщение, используя постоянное XMPP-соединение или HTTP-запрос. Если устройство офлайн — сообщение ставится в очередь и доставляется при восстановлении связи.
FCM гарантирует доставку с помощью приоритетных очередей и механизма подтверждения получения. На Android сообщение хранится до 28 дней в очереди, на iOS — до 4 недель (через APNS). По истечении срока сообщение удаляется без уведомления.
Токен регистрации может измениться в нескольких случаях: при восстановлении данных приложения, при обновлении до новой версии или при очистке кэша. Приложение должно реализовать FirebaseMessagingService.onNewToken для обработки обновления токена и синхронизации с сервером.
FCM поддерживает два типа полезной нагрузки: notification и data. Каждый тип определяет, как и когда сообщение обрабатывается на устройстве получателя.
| Параметр | Notification | Data |
|---|---|---|
| Автоматический показ | Да, если приложение в фоне | Нет, только в приложении |
| Обработка | Система/NOS — в фоне; app — в фореграунде | Всегда в приложении (onMessageReceived) |
| Максимальный размер | 4 КБ | 4 КБ |
| Кастомные ключи | Ограничены предопределёнными полями | Любые пары ключ-значение |
| Требует CollapseKey | Опционально | Опционально для группировки |
На практике рекомендуется использовать data-сообщения, если приложению нужна полная обработка уведомления в onMessageReceived. Notification-сообщения подходят для простых сценариев, где системный показ достаточен.
FCM и APNS — два основных сервиса push-доставки. FCM работает как кроссплатформенный шлюз, APNS — только для экосистемы Apple. Их ключевые различия — в архитектуре, требованиях к сертификатам и механизмах маршрутизации.
Выбор между FCM и прямым APNS зависит от архитектуры проекта. Для кроссплатформенных приложений FCM — оптимальный выбор. Для iOS-only проектов допустима прямая работа с APNS через HTTP/2 API.
FCM оправдан, когда проект использует Android и iOS одновременно, а также при необходимости аналитики Firebase, A/B-тестирования уведомлений или топиков без серверной логики. Прямой APNS предпочтителен для iOS-only приложений с минимальными зависимостями и строгими требованиями к задержке доставки.
Для подключения FCM к Android-приложению необходимо добавить Firebase SDK и настроить google-services.json в корне проекта. После регистрации токена приложение готово принимать сообщения через FirebaseMessagingService.
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
После настройки приложение автоматически получает токен FCM при первом запуске. Токен необходимо отправить на сервер приложения для последующей отправки уведомлений на это устройство.
На Android 8+ перед отправкой FCM-уведомления с автоматическим показом необходимо создать NotificationChannel. FCM notification-сообщения используют канал с ID по умолчанию, но рекомендуется создавать собственный канал через FirebaseMessagingService при получении первого сообщения. Data-сообщения не требуют канала — приложение само решает, как и когда показать уведомление.
На iOS FCM выступает промежуточным звеном между сервером приложения и APNS. Firebase получает сообщение от сервера, оборачивает его в APNS-формат и отправляет через шлюз Apple. Разработчику нужно настроить APNS-ключ или сертификат в консоли Firebase.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
На iOS регистрация в APNS происходит асинхронно. FCM SDK автоматически получает APNS-токен и передаёт его на сервер Firebase. didReceiveRegistrationToken срабатывает при получении нового FCM-токена, который объединяет APNS-токен с идентификатором проекта.
FCM предоставляет консоль Firebase для мониторинга доставки: количество отправленных, принятых и показанных уведомлений. Также доступен статус-коллбек через Firebase Cloud Functions для отслеживания ошибок доставки на стороне сервера. Ключевые метрики: impressions (показы) и opens (открытия) уведомлений.
При работе с FCM важно правильно выбирать тип сообщения для каждого сценария. Для простых уведомлений с автоматическим показом используйте notification-сообщения. Для случаев, когда приложению нужно обработать данные до показа — data-сообщения. Смешанный тип (notification + data) рекомендуется только если данные нужны для аналитики, а не для изменения содержимого уведомления.
Управляйте токенами централизованно. Храните актуальные токены на сервере в таблице с привязкой к пользователю и платформе. Реализуйте механизм очистки устаревших токенов: при ошибке NotRegistered или InvalidRegistration удаляйте токен из базы. Токены меняются редко, но их чистка — обязательный элемент поддержки FCM.
Используйте коллапс-ключи (collapseKey) для группировки сообщений. Если вы отправляете несколько уведомлений одного типа (например, "обновление курса валют"), установите одинаковый collapseKey. FCM доставит только последнее сообщение из группы, что снижает нагрузку на устройство и не раздражает пользователя шквалом уведомлений.
Мониторьте доставку через Firebase Console и Cloud Functions. Аналитика FCM показывает количество отправленных, принятых и показанных уведомлений. Если процент показов ниже 70% — проверьте настройки каналов на Android и разрешений на iOS. Низкая доставка часто связана с отключёнными каналами или запретом на уведомления. Пятое: используйте A/B-тестирование Firebase для оптимизации текста уведомлений и времени отправки — это повышает конверсию открытий на 15–25% по данным Firebase.
Часто задаваемые вопросы
FCM — это эволюционное обновление GCM (Google Cloud Messaging). FCM предлагает упрощённую настройку через Firebase Console, встроенную аналитику, топики и поддержку Web Push. GCM официально отключён с апреля 2019 года, все проекты должны быть мигрированы на FCM.
Firebase Cloud Messaging — бесплатный сервис без ограничений на количество сообщений. Оплата взимается только за использование других сервисов Firebase, таких как Cloud Functions или Firestore. FCM не требует подписки Spark или Blaze для базовой отправки уведомлений.
Токен FCM меняется при: восстановлении приложения из бэкапа, очистке данных приложения, переустановке, обновлении до новой версии с изменением Sender ID. Всегда обрабатывайте onNewToken в FirebaseMessagingService для отправки нового токена на сервер.
FCM от Google заблокирован на территории Китая. Для доставки уведомлений в Китае используют альтернативные сервисы: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Для кроссплатформенной доставки применяются мультипровайдерные сервисы вроде Getui.
Используйте встроенную консоль Firebase: выберите "Cloud Messaging" — "Send Test Message". Введите тестовый токен и отправьте notification-сообщение. На устройстве должно появиться уведомление. Также можно мониторить логи FirebaseMessagingService.onMessageReceived.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также