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

Обсъдете проекта

Прочетете също