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, URL зображення та звук повідомлення. Система автоматично створює та відображає повідомлення в системному треї, навіть якщо додаток знаходиться у фоні або вбитий. Користувач бачить стандартний банер із заголовком та текстом, а при натисканні додаток відкривається з переданими в 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<String>. Для відстеження оновлень токена перевизначається метод 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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