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 — у фоні; застосунок — у форі | Завжди в застосунку (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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також