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 определя оптималния канал за доставка (Wi-Fi или мобилни данни). Доставка — системата предава съобщението на целевото приложение. След успешна доставка 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
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 поддържа абонамент за топици. Топик — е именуван канал, на който клиентското приложение се абонира чрез FirebaseMessaging.getInstance().subscribeToTopic(). Сървърът може да изпрати съобщение на топик и то ще бъде доставено на всички абонирани устройства. Топиците са подходящи за бюлетини, промоционални известия и event 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също