Firebase Cloud Messaging (FCM) — це крос-платформений сервіс доставки push-повідомлень і повідомлень від Google, призначений для мобільних і веб-додатків. FCM забезпечує надійну передачу даних між сервером і клієнтськими пристроями без необхідності підтримувати постійне мережеве з’єднання. За даними Firebase Documentation, 2026, через інфраструктуру FCM щодня проходить більше 300 мільярдів повідомлень по всьому світу. Сервіс підтримує як повідомлення з автоматичним відображенням, так і data-повідомлення для прихованої передачі даних у фоні.
Головне
Firebase Cloud Messaging — це хмарний сервіс Google, який забезпечує передачу push-повідомлень і data-повідомлень між сервером додатка та клієнтськими пристроями. Сервіс замінив застарілий Google Cloud Messaging (GCM) і став стандартним рішенням для доставки push в екосистемі Firebase. FCM підтримує Android, iOS, Web та Unity, забезпечуючи єдиний інтерфейс відправки незалежно від цільової платформи.
Сервіс надає кілька механізмів доставки повідомлень, кожен з яких вирішує своє завдання. Notification-повідомлення відображаються системою автоматично при отриманні — розробнику не потрібно писати код для показу повідомлення. Data-повідомлення передають довільний payload у вигляді пар ключ-значення та обробляються всередині додатка. Комбіновані повідомлення містять одночасно видиму та приховану частини для максимальної гнучкості.
Реалізація власного push-сервера вимагає постійного підтримання TCP-з’єднання з кожним пристроєм, що неефективно та небезпечно. FCM використовує єдину інфраструктуру Google, яка підтримує з’єднання з мільярдами пристроїв одночасно. Сервіс автоматично керує повторними спробами доставки, чергами повідомлень та балансуванням навантаження, звільняючи розробника від необхідності вирішувати ці завдання самостійно.
Архітектура FCM складається з трьох ключових компонентів: сервер провайдера (ваш backend), сервер Firebase Cloud Messaging та клієнтський додаток на пристрої. Коли сервер надсилає повідомлення, воно спочатку потрапляє в інфраструктуру FCM, яка маршрутизує його на цільовий пристрій. Якщо пристрій офлайн, FCM зберігає повідомлення в черзі та доставляє його при відновленні з’єднання.
При першому запуску додаток викликає Firebase SDK, який реєструє пристрій у сервісі FCM та отримує унікальний Registration Token. Цей токен являє собою рядок довжиною близько 150 символів та ідентифікує конкретний екземпляр додатка на конкретному пристрої. Токен може змінюватися при перевстановленні додатка, очищенні даних або відновленні з бекапу — розробник повинен обробляти оновлення токена через делегат onNewToken.
Коли сервер надсилає запит через FCM API, повідомлення проходить через кілька етапів. Прийом та валідація — FCM перевіряє коректність запиту та наявність цільового пристрою. Черга — якщо пристрій недоступний, повідомлення потрапляє в чергу зберігання. Маршрутизація — FCM визначає оптимальний канал доставки (WiFi або стільникові дані). Доставка — система передає повідомлення цільовому додатку. Після успішної доставки FCM повертає серверу ідентифікатор повідомлення.
Firebase Cloud Messaging підтримує три типи повідомлень, кожен з яких має свої особливості обробки на клієнтській стороні. Notification-повідомлення обробляються системним сервісом Google Play Services в Android та APNs в iOS та автоматично відображаються у вигляді push-банерів. Data-повідомлення передаються безпосередньо в додаток та обробляються через callback onMessageReceived в Android та application(_:didReceiveRemoteNotification:) в iOS.
Notification-повідомлення містить визначені поля: title, body, URL зображення та звук повідомлення. Система автоматично створює та відображає повідомлення в системному треї, навіть якщо додаток знаходиться у фоні або вбитий. Користувач бачить стандартний банер із заголовком та текстом, а при натисканні додаток відкривається з переданими в payload даними. Якщо додаток активний, notification-повідомлення можна перехопити та обробити в коді.
Data-повідомлення — це кастомний набір пар ключ-значення без визначених полів. Payload не обробляється системою автоматично — додаток отримує сирі дані та може інтерпретувати їх довільним чином. Data-повідомлення використовуються для синхронізації даних у фоні, оновлення локального кешу, тригера синхронізації або передачі команд без відображення повідомлення. В Android data-повідомлення доставляється завжди, навіть якщо додаток вбитий або у фоні.
FCM дозволяє надсилати повідомлення, яке містить одночасно notification-частину (для відображення) та data-частину (для обробки). Комбінований payload включає як визначені поля notification, так і довільні ключі data. Система відображає повідомлення з notification-частини, а data-частина передається в intent extras додатка при відкритті. Це зручно для сценаріїв, де потрібно показати користувачеві повідомлення та одночасно передати контекст для переходу на конкретний екран.
| Тип | Авто-відображення | Обробка у фоні | Приклад |
|---|---|---|---|
| Notification | Так, системою | Автоматично, без коду | Привітальне push-повідомлення |
| Data | Ні | Через callback додатка | Синхронізація даних у фоні |
| Комбіноване | Так, notification-частина | Data-частина при відкритті | Повідомлення + посилання на замовлення |
Інтеграція 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-повідомлення на цей пристрій.
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.
<!-- 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 вимагає налаштування як на стороні Apple Push Notification Service (APNs), так і в Firebase Console. На відміну від Android, де FCM керує з’єднанням безпосередньо, в iOS FCM використовує APNs як транспортний рівень. Додаток реєструється на отримання push-повідомлень через UIApplication.shared.registerForRemoteNotifications, а Firebase SDK перехоплює отриманий device token та пов’язує його з FCM Registration Token.
Для роботи FCM в iOS необхідно завантажити APNs-ключ або сертифікат у Firebase Console. APNs-ключ — це сучасний спосіб автентифікації без сертифікатів (рекомендується Apple). Ключ створюється в Apple Developer Portal в розділі Keys та завантажується в налаштування Cloud Messaging у Firebase Console. Після налаштування APNs додаток запитує дозвіл на повідомлення через UNUserNotificationCenter та реєструється через APNs.
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.
Тіло запиту містить JSON-об’єкт з інформацією про повідомлення: target (токен, топік або умова), notification (для відображення) та data (кастомний payload). Автентифікація через Service Account JSON-ключа, який завантажується в змінні оточення сервера. Токен доступу генерується через бібліотеку google-auth-library. Google рекомендує використовувати Firebase Admin SDK для автоматичного керування автентифікацією та повторними спробами.
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 працює на Android через власну інфраструктуру Google, а на iOS використовує APNs як транспортний протокол. FCM надає єдиний API для обох платформ, автоматичне зберігання повідомлень в офлайні та аналітику доставки, чого немає в чистому APNs.
Так, через Firebase Console в розділі Cloud Messaging можна надсилати повідомлення вручну на вибрані пристрої, топіки або сегменти аудиторії. Функція підходить для тестування та разових розсилок, але не замінює серверну інтеграцію для production-додатків.
Підпишіться на оновлення токена через onNewToken в FirebaseMessagingService (Android) або MessagingDelegate (iOS). При зміні токена відправте новий токен на сервер та видаліть старий. Сервер повинен оновити базу даних та припинити спроби відправки на застарілий токен.
FCM зберігає повідомлення в черзі до 28 днів і доставляє його при відновленні з’єднання. Для notification-повідомлень колапсується тільки останнє повідомлення для кожної колапс-групи. Data-повідомлення зберігаються окремо та доставляються в порядку відправки без колапсу.
FCM повністю безкоштовний без обмежень на кількість повідомлень. Використання FCM не тарифікується ні в рамках плану Spark, ні в плані Blaze. Обмеження є тільки на розмір payload: до 4 KB для notification-повідомлень та до 2 KB для data-повідомлень.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також