Firebase Cloud Messaging: co to jest, zasada działania i powiadomienia push

Autor: IT Sectr Opublikowano: 2026-04-29 Czas czytania: 9 min

Firebase Cloud Messaging (FCM) — to wieloplatformowa usługa dostarczania powiadomień push i komunikatów od Google, przeznaczona dla aplikacji mobilnych i internetowych. FCM zapewnia niezawodne przesyłanie danych między serwerem a urządzeniami klienckimi bez konieczności utrzymywania stałego połączenia sieciowego. Według Firebase Documentation, 2026, przez infrastrukturę FCM codziennie przechodzi ponad 300 miliardów wiadomości na całym świecie. Usługa obsługuje zarówno powiadomienia z automatycznym wyświetlaniem, jak i komunikaty data do ukrytego przesyłania danych w tle.

Najważniejsze

  • FCM — darmowa usługa powiadomień push od Google z obsługą Android, iOS i Web poprzez jeden API i Firebase Console.
  • Typy wiadomości — wiadomości notification są wyświetlane automatycznie przez system, wiadomości data pozwalają wysyłać dowolny JSON i przetwarzać go w aplikacji.
  • Tokeny urządzeń — każda aplikacja otrzymuje unikalny Registration Token, który jest używany przez serwer do kierunkowego wysyłania powiadomień push.
  • Priorytety dostarczania — priorytety normal i high określają zachowanie systemu przy oszczędzaniu baterii: wiadomości high wybudzają urządzenie z trybu Doze.
  • Tematy i grupy — FCM obsługuje subskrypcję tematów do masowych wysyłek oraz Device Groups do wysyłania na kilka urządzeń jednego użytkownika.

Czym jest Firebase Cloud Messaging

Firebase Cloud Messaging — to chmurowa usługa Google, która zapewnia przesyłanie powiadomień push i wiadomości data między serwerem aplikacji a urządzeniami klienckimi. Usługa zastąpiła przestarzały Google Cloud Messaging (GCM) i stała się standardowym rozwiązaniem do dostarczania push w ekosystemie Firebase. FCM obsługuje Android, iOS, Web i Unity, zapewniając jednolity interfejs wysyłania niezależnie od docelowej platformy.

Kluczowe możliwości FCM

Usługa udostępnia kilka mechanizmów dostarczania wiadomości, z których każdy rozwiązuje swoje zadanie. Wiadomości notification są wyświetlane przez system automatycznie po otrzymaniu — programista nie musi pisać kodu do pokazywania powiadomienia. Wiadomości data przesyłają dowolny payload w postaci par klucz-wartość i są przetwarzane wewnątrz aplikacji. Wiadomości kombinowane zawierają jednocześnie widoczną i ukrytą część dla maksymalnej elastyczności.

Zalety w porównaniu z własnym rozwiązaniem

Implementacja własnego serwera push wymaga ciągłego utrzymywania połączenia TCP z każdym urządzeniem, co jest nieefektywne i niebezpieczne. FCM wykorzystuje jednolitą infrastrukturę Google, która utrzymuje połączenie z miliardami urządzeń jednocześnie. Usługa automatycznie zarządza ponownymi próbami dostarczenia, kolejkami wiadomości i równoważeniem obciążenia, uwalniając programistę od konieczności rozwiązywania tych zadań samodzielnie.

Jak działa Firebase Cloud Messaging

Architektura FCM składa się z trzech kluczowych komponentów: serwera dostawcy (twój backend), serwera Firebase Cloud Messaging i aplikacji klienckiej na urządzeniu. Gdy serwer wysyła wiadomość, trafia ona najpierw do infrastruktury FCM, która kieruje ją na docelowe urządzenie. Jeśli urządzenie jest offline, FCM przechowuje wiadomość w kolejce i dostarcza ją po przywróceniu połączenia.

Rejestracja urządzenia i uzyskanie tokena

Przy pierwszym uruchomieniu aplikacja wywołuje Firebase SDK, który rejestruje urządzenie w usłudze FCM i otrzymuje unikalny Registration Token. Token ten to ciąg o długości około 150 znaków, identyfikujący konkretną instancję aplikacji na konkretnym urządzeniu. Token może się zmieniać przy ponownej instalacji aplikacji, czyszczeniu danych lub przywracaniu z kopii zapasowej — programista powinien obsługiwać aktualizację tokena przez delegata onNewToken.

Cykl życia wiadomości

Gdy serwer wysyła żądanie przez FCM API, wiadomość przechodzi przez kilka etapów. Przyjęcie i walidacja — FCM sprawdza poprawność żądania i istnienie docelowego urządzenia. Kolejka — jeśli urządzenie jest niedostępne, wiadomość trafia do kolejki przechowywania. Kierowanie — FCM określa optymalny kanał dostarczenia (Wi-Fi lub dane komórkowe). Dostarczenie — system przekazuje wiadomość do docelowej aplikacji. Po pomyślnym dostarczeniu FCM zwraca serwerowi identyfikator wiadomości.

Typy wiadomości w FCM

Firebase Cloud Messaging obsługuje trzy typy wiadomości, z których każdy ma swoje cechy przetwarzania po stronie klienta. Wiadomości notification są przetwarzane przez systemową usługę Google Play Services w Android i APNs w iOS i automatycznie wyświetlane jako banery push. Wiadomości data są przekazywane bezpośrednio do aplikacji i przetwarzane przez callback onMessageReceived w Android i application(_:didReceiveRemoteNotification:) w iOS.

Wiadomości notification

Wiadomość notification zawiera predefiniowane pola: title, body, URL obrazu i dźwięk powiadomienia. System automatycznie tworzy i wyświetla powiadomienie w zasobniku systemowym, nawet jeśli aplikacja jest w tle lub zabita. Użytkownik widzi standardowy baner z tytułem i tekstem, a po kliknięciu aplikacja otwiera się z danymi przekazanymi w payload. Jeśli aplikacja jest aktywna, wiadomość notification można przechwycić i przetworzyć w kodzie.

Wiadomości data

Wiadomość data to niestandardowy zbiór par klucz-wartość bez predefiniowanych pól. Payload nie jest przetwarzany przez system automatycznie — aplikacja otrzymuje surowe dane i może je interpretować w dowolny sposób. Wiadomości data są używane do synchronizacji danych w tle, aktualizacji lokalnego cache, wyzwalania synchronizacji lub przesyłania poleceń bez wyświetlania powiadomienia. W Android wiadomość data jest dostarczana zawsze, nawet jeśli aplikacja jest zabita lub w tle.

Wiadomości kombinowane

FCM pozwala wysyłać wiadomość, która zawiera jednocześnie część notification (do wyświetlenia) i część data (do przetworzenia). Kombinowany payload obejmuje zarówno predefiniowane pola notification, jak i dowolne klucze data. System wyświetla powiadomienie z części notification, a część data jest przekazywana w intent extras aplikacji przy otwarciu. Jest to wygodne w scenariuszach, gdzie trzeba pokazać użytkownikowi powiadomienie i jednocześnie przekazać kontekst do przejścia na konkretny ekran.

TypAuto-wyświetlaniePrzetwarzanie w tlePrzykład
NotificationTak, przez systemAutomatycznie, bez koduPowitalne powiadomienie push
DataNiePrzez callback aplikacjiSynchronizacja danych w tle
KombinowaneTak, część notificationCzęść data przy otwarciuPowiadomienie + link do zamówienia

Konfiguracja FCM w Android

Integracja FCM w Android rozpoczyna się od podłączenia Firebase SDK przez plik build.gradle na poziomie aplikacji. Po dodaniu zależności i pliku google-services.json aplikacja automatycznie otrzymuje Registration Token, który jest przekazywany przez callback FirebaseMessagingService. Do odbierania powiadomień należy utworzyć serwis dziedziczący po FirebaseMessagingService i zarejestrować go w AndroidManifest.xml.

Inicjalizacja i uzyskanie tokena

Po podłączeniu SDK Firebase automatycznie generuje token urządzenia bez dodatkowego kodu. Token jest dostępny przez FirebaseMessaging.getInstance().token, który zwraca Task. Do śledzenia aktualizacji tokena nadpisuje się metodę onNewToken w serwisie. Token należy przekazać na serwer dostawcy, aby serwer mógł wysyłać powiadomienia push na to urządzenie.

kotlin
class MyFirebaseMessagingService :
    FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendTokenToServer(token)
    }

    override fun onMessageReceived(
        message: RemoteMessage
    ) {
        val data = message.data
        val title = "Nowa wiadomość"
        val body = data["body"] ?: ""
        showNotification(title, body)
    }
}

Rejestracja serwisu w manifeście

Serwis do odbierania wiadomości FCM należy zarejestrować w AndroidManifest.xml z odpowiednimi intent-filter. Dodanie znacznika service z uprawnieniem INTERNET i wskazaniem action. Bez rejestracji serwisu wiadomości nie będą dostarczane do aplikacji w tle. Do wyświetlania powiadomień w Android 13+ wymagane jest runtime-zezwolenie 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>

Konfiguracja FCM w iOS

Integracja FCM w iOS wymaga konfiguracji zarówno po stronie Apple Push Notification Service (APNs), jak i w Firebase Console. W przeciwieństwie do Androida, gdzie FCM zarządza połączeniem bezpośrednio, w iOS FCM wykorzystuje APNs jako warstwę transportową. Aplikacja rejestruje się do otrzymywania powiadomień push przez UIApplication.shared.registerForRemoteNotifications, a Firebase SDK przechwytuje otrzymany device token i łączy go z FCM Registration Token.

Konfiguracja APNs i rejestracja na powiadomienia

Do działania FCM w iOS należy przesłać klucz APNs lub certyfikat w Firebase Console. Klucz APNs — to nowoczesny sposób uwierzytelniania bez certyfikatów (zalecany przez Apple). Klucz tworzy się w Apple Developer Portal w sekcji Keys i przesyła w ustawieniach Cloud Messaging w Firebase Console. Po konfiguracji APNs aplikacja żąda uprawnienia do powiadomień przez UNUserNotificationCenter i rejestruje się przez 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
    }
}

Obsługa przychodzących powiadomień

Do obsługi otrzymanych powiadomień implementuje się delegata UNUserNotificationCenter. Metoda willPresent jest wywoływana, gdy powiadomienie zostanie odebrane przy aktywnej aplikacji — tutaj można pokazać niestandardową notyfikację in-app lub zignorować systemowy baner. Metoda didReceive jest wywoływana, gdy użytkownik kliknie powiadomienie — tutaj wykonuje się przejście na odpowiedni ekran. Dla wiadomości data używany jest delegat MessagingDelegate, który otrzymuje payload przy odebraniu wiadomości FCM w tle.

Wysyłanie wiadomości z serwera

Wysyłanie serwerowe wiadomości FCM odbywa się przez HTTP v1 API Firebase Cloud Messaging lub przestarzałe Firebase Cloud Messaging API. HTTP v1 API jest zalecanym sposobem, wykorzystuje uwierzytelnianie OAuth 2.0 przez Service Account i obsługuje wszystkie nowoczesne możliwości FCM, w tym analitykę dostarczania i testy A/B powiadomień. Żądanie wysyłane jest metodą POST na endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.

Format żądania HTTP v1

Treść żądania zawiera obiekt JSON z informacjami o wiadomości: target (token, temat lub warunek), notification (do wyświetlenia) i data (niestandardowy payload). Uwierzytelnianie przez klucz JSON Service Account, który jest ładowany do zmiennych środowiskowych serwera. Token dostępu jest generowany przez bibliotekę google-auth-library. Google zaleca używanie Firebase Admin SDK do automatycznego zarządzania uwierzytelnianiem i ponownymi próbami.

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: "Zniżka 20%", body: "Na wszystkie usługi dzisiaj" },
    data: { screen: "promo", promoId: "324" },
    android: { priority: "high" },
    apns: { payload: { aps: { sound: "default" } } }
}

admin.messaging().send(message)
    .then(response => {
        console.log("Pomyślnie wysłano:", response)
    })
    .catch(error => {
        console.log("Błąd wysyłania:", error)
    })

Tematy i wysyłki masowe

Do wysyłania powiadomień do grupy użytkowników FCM obsługuje subskrypcję tematów. Temat (topic) — to nazwany kanał, na który aplikacja kliencka subskrybuje przez FirebaseMessaging.getInstance().subscribeToTopic(). Serwer może wysłać wiadomość na temat, a zostanie ona dostarczona do wszystkich subskrybujących urządzeń. Tematy nadają się do newsletterów, powiadomień o promocjach i eventowych push. Do bardziej precyzyjnej segmentacji używa się warunków (conditions) opartych na wielu tematach z operatorami logicznymi.

Często zadawane pytania

Czym różni się FCM od APNs?

FCM działa w Android poprzez własną infrastrukturę Google, a w iOS wykorzystuje APNs jako protokół transportowy. FCM zapewnia jednolity API dla obu platform, automatyczne przechowywanie wiadomości offline i analitykę dostarczania, czego nie ma w czystym APNs.

Czy można wysyłać wiadomości FCM bez serwera?

Tak, przez Firebase Console w sekcji Cloud Messaging można ręcznie wysyłać powiadomienia na wybrane urządzenia, tematy lub segmenty odbiorców. Funkcja nadaje się do testowania i jednorazowych wysyłek, ale nie zastępuje integracji serwerowej dla aplikacji produkcyjnych.

Co zrobić, jeśli token urządzenia się zmienił?

Zasubskrybuj aktualizacje tokena przez onNewToken w FirebaseMessagingService (Android) lub MessagingDelegate (iOS). Po zmianie tokena wyślij nowy token na serwer i usuń stary. Serwer powinien zaktualizować bazę danych i zaprzestać prób wysyłania na nieaktualny token.

Jak FCM obsługuje urządzenia offline?

FCM przechowuje wiadomość w kolejce do 28 dni i dostarcza ją po przywróceniu połączenia. Dla wiadomości notification kolapsowana jest tylko ostatnia wiadomość dla każdej grupy kolapsacji. Wiadomości data są przechowywane osobno i dostarczane w kolejności wysyłania bez kolapsacji.

Ile kosztuje korzystanie z Firebase Cloud Messaging?

FCM jest całkowicie darmowy bez ograniczeń na liczbę wiadomości. Korzystanie z FCM nie jest taryfikowane ani w ramach planu Spark, ani w planie Blaze. Ograniczenia dotyczą tylko rozmiaru payload: do 4 KB dla wiadomości notification i do 2 KB dla wiadomości data.

Podsumowanie

  • Firebase Cloud Messaging — wieloplatformowa usługa powiadomień push od Google, obsługująca Android, iOS, Web i Unity przez jeden API.
  • Architektura FCM składa się z serwera dostawcy, infrastruktury Firebase i aplikacji klienckiej, zapewniając niezawodne dostarczanie wiadomości przez globalną sieć Google.
  • Trzy typy wiadomości — notification (auto-wyświetlanie), data (dowolny payload bez UI) i kombinowane (oba typy w jednej wiadomości).
  • FCM w Android działa przez FirebaseMessagingService z własnym połączeniem, a w iOS wykorzystuje APNs jako transport z przechwytywaniem tokena przez MessagingDelegate.
  • HTTP v1 API jest zalecane do wysyłania serwerowego z uwierzytelnianiem OAuth 2.0 przez Service Account i obsługą analityki dostarczania.
  • Tematy pozwalają wysyłać wiadomości do grup subskrybentów, a warunki (conditions) — łączyć wiele tematów dla precyzyjnej segmentacji.
  • FCM jest darmowy bez ograniczenia na liczbę wiadomości, z przechowywaniem wiadomości offline do 28 dni i maksymalnym rozmiarem payload 4 KB.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również