Firebase Cloud Messaging (FCM) — este un serviciu cross-platform de livrare a notificărilor push și mesajelor de la Google, destinat aplicațiilor mobile și web. FCM asigură transmiterea fiabilă a datelor între server și dispozitivele client fără a fi nevoie să mențină o conexiune de rețea permanentă. Potrivit Firebase Documentation, 2026, prin infrastructura FCM trec zilnic peste 300 de miliarde de mesaje în întreaga lume. Serviciul suportă atât notificări cu afișare automată, cât și mesaje data pentru transmiterea ascunsă a datelor în fundal.
Principalele puncte
Firebase Cloud Messaging — este un serviciu cloud Google care asigură transmiterea notificărilor push și a mesajelor data între serverul aplicației și dispozitivele client. Serviciul a înlocuit vechiul Google Cloud Messaging (GCM) și a devenit soluția standard pentru livrarea push în ecosistemul Firebase. FCM suportă Android, iOS, Web și Unity, oferind o interfață unică de trimitere independent de platforma țintă.
Serviciul oferă mai multe mecanisme de livrare a mesajelor, fiecare rezolvând propria sarcină. Mesajele notification sunt afișate de sistem automat la primire — dezvoltatorul nu trebuie să scrie cod pentru afișarea notificării. Mesajele data transmit un payload arbitrar sub formă de perechi cheie-valoare și sunt procesate în interiorul aplicației. Mesajele combinate conțin simultan părți vizibile și ascunse pentru flexibilitate maximă.
Implementarea unui server push propriu necesită menținerea constantă a conexiunii TCP cu fiecare dispozitiv, ceea ce este ineficient și nesigur. FCM folosește infrastructura unică Google, care menține conexiunea cu miliarde de dispozitive simultan. Serviciul gestionează automat încercările repetate de livrare, cozile de mesaje și echilibrarea sarcinii, eliberând dezvoltatorul de necesitatea de a rezolva aceste sarcini singur.
Arhitectura FCM constă din trei componente cheie: serverul furnizorului (backend-ul tău), serverul Firebase Cloud Messaging și aplicația client pe dispozitiv. Când serverul trimite un mesaj, acesta ajunge mai întâi în infrastructura FCM, care îl direcționează către dispozitivul țintă. Dacă dispozitivul este offline, FCM stochează mesajul în coadă și îl livrează la restabilirea conexiunii.
La prima pornire, aplicația apelează Firebase SDK, care înregistrează dispozitivul în serviciul FCM și primește un Registration Token unic. Acest token este un șir de aproximativ 150 de caractere care identifică o instanță specifică a aplicației pe un dispozitiv specific. Tokenul se poate schimba la reinstalarea aplicației, ștergerea datelor sau restaurarea din backup — dezvoltatorul trebuie să gestioneze actualizarea tokenului prin delegatul onNewToken.
Când serverul trimite o cerere prin FCM API, mesajul trece prin mai multe etape. Primirea și validarea — FCM verifică corectitudinea cererii și existența dispozitivului țintă. Coada — dacă dispozitivul este indisponibil, mesajul intră în coada de stocare. Direcționarea — FCM determină canalul optim de livrare (Wi-Fi sau date mobile). Livrarea — sistemul transmite mesajul aplicației țintă. După livrarea cu succes, FCM returnează serverului un identificator de mesaj.
Firebase Cloud Messaging suportă trei tipuri de mesaje, fiecare având propriile caracteristici de procesare pe partea clientului. Mesajele notification sunt procesate de serviciul de sistem Google Play Services în Android și APNs în iOS și sunt afișate automat sub formă de banere push. Mesajele data sunt transmise direct aplicației și procesate prin callback-ul onMessageReceived în Android și application(_:didReceiveRemoteNotification:) în iOS.
Mesajul notification conține câmpuri predefinite: title, body, URL-ul imaginii și sunetul notificării. Sistemul creează și afișează automat notificarea în tava de sistem, chiar dacă aplicația este în fundal sau oprită. Utilizatorul vede un banner standard cu titlu și text, iar la apăsare aplicația se deschide cu datele transmise în payload. Dacă aplicația este activă, mesajul notification poate fi interceptat și procesat în cod.
Mesajul data este un set personalizat de perechi cheie-valoare fără câmpuri predefinite. Payload-ul nu este procesat de sistem automat — aplicația primește datele brute și le poate interpreta în mod arbitrar. Mesajele data sunt folosite pentru sincronizarea datelor în fundal, actualizarea cache-ului local, declanșarea sincronizării sau transmiterea comenzilor fără afișarea notificării. În Android, mesajul data este livrat întotdeauna, chiar dacă aplicația este oprită sau în fundal.
FCM permite trimiterea unui mesaj care conține simultan o parte notification (pentru afișare) și o parte data (pentru procesare). Payload-ul combinat include atât câmpurile predefinite notification, cât și cheile arbitrare data. Sistemul afișează notificarea din partea notification, iar partea data este transmisă în intent extras ale aplicației la deschidere. Acest lucru este convenabil în scenariile în care trebuie să arătați utilizatorului o notificare și să transmiteți simultan contextul pentru navigarea către un ecran specific.
| Tip | Afișare automată | Procesare în fundal | Exemplu |
|---|---|---|---|
| Notification | Da, de sistem | Automat, fără cod | Notificare push de bun venit |
| Data | Nu | Prin callback-ul aplicației | Sincronizare date în fundal |
| Combinat | Da, partea notification | Partea data la deschidere | Notificare + link comandă |
Integrarea FCM în Android începe cu conectarea Firebase SDK prin fișierul build.gradle la nivelul aplicației. După adăugarea dependențelor și a fișierului google-services.json, aplicația primește automat Registration Token, care este transmis prin callback-ul FirebaseMessagingService. Pentru primirea notificărilor, trebuie creat un serviciu care moștenește FirebaseMessagingService și înregistrat în AndroidManifest.xml.
După conectarea SDK-ului, Firebase generează automat tokenul dispozitivului fără cod suplimentar. Tokenul este accesibil prin FirebaseMessaging.getInstance().token, care returnează Task
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Mesaj nou"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Serviciul pentru primirea mesajelor FCM trebuie înregistrat în AndroidManifest.xml cu intent-filter corespunzătoare. Adăugarea tag-ului service cu permisiunea INTERNET și specificarea action. Fără înregistrarea serviciului, mesajele nu vor fi livrate aplicației în fundal. Pentru afișarea notificărilor în Android 13+ este necesară permisiunea 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>
Integrarea FCM în iOS necesită configurare atât pe partea Apple Push Notification Service (APNs), cât și în Firebase Console. Spre deosebire de Android, unde FCM gestionează conexiunea direct, în iOS FCM folosește APNs ca strat de transport. Aplicația se înregistrează pentru primirea notificărilor push prin UIApplication.shared.registerForRemoteNotifications, iar Firebase SDK interceptează tokenul de dispozitiv primit și îl leagă de FCM Registration Token.
Pentru funcționarea FCM în iOS, trebuie încărcată o cheie APNs sau un certificat în Firebase Console. Cheia APNs — este o metodă modernă de autentificare fără certificate (recomandată de Apple). Cheia se creează în Apple Developer Portal în secțiunea Keys și se încarcă în setările Cloud Messaging din Firebase Console. După configurarea APNs, aplicația solicită permisiunea pentru notificări prin UNUserNotificationCenter și se înregistrează prin 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
}
}
Pentru procesarea notificărilor primite se implementează delegatul UNUserNotificationCenter. Metoda willPresent este apelată când notificarea este primită în timp ce aplicația este activă — aici se poate afișa o notificare in-app personalizată sau ignora bannerul sistemului. Metoda didReceive este apelată când utilizatorul face clic pe notificare — aici se realizează navigarea către ecranul corespunzător. Pentru mesajele data se folosește delegatul MessagingDelegate, care primește payload-ul la primirea mesajului FCM în fundal.
Trimiterea server-side a mesajelor FCM se realizează prin HTTP v1 API Firebase Cloud Messaging sau prin API-ul învechit Firebase Cloud Messaging. HTTP v1 API este metoda recomandată, utilizează autentificarea OAuth 2.0 prin Service Account și suportă toate capabilitățile moderne FCM, inclusiv analiza livrării și testarea A/B a notificărilor. Cererea este trimisă prin metoda POST la endpoint-ul https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Corpul cererii conține un obiect JSON cu informații despre mesaj: target (token, topic sau condiție), notification (pentru afișare) și data (payload personalizat). Autentificarea prin cheia JSON Service Account, care este încărcată în variabilele de mediu ale serverului. Tokenul de acces este generat prin biblioteca google-auth-library. Google recomandă utilizarea Firebase Admin SDK pentru gestionarea automată a autentificării și încercărilor repetate.
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: "Reducere 20%", body: "Pentru toate serviciile astăzi" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Trimis cu succes:", response)
})
.catch(error => {
console.log("Eroare de trimitere:", error)
})
Pentru trimiterea notificărilor către un grup de utilizatori, FCM suportă abonarea la topicuri. Topicul — este un canal denumit la care aplicația client se abonează prin FirebaseMessaging.getInstance().subscribeToTopic(). Serverul poate trimite un mesaj pe un topic, iar acesta va fi livrat tuturor dispozitivelor abonate. Topicurile sunt potrivite pentru newslettere, notificări promoționale și push-uri de evenimente. Pentru o segmentare mai precisă se folosesc condiții (conditions) bazate pe mai multe topicuri cu operatori logici.
Întrebări frecvente
FCM funcționează pe Android prin propria infrastructură Google, iar pe iOS folosește APNs ca protocol de transport. FCM oferă un API unic pentru ambele platforme, stocarea automată a mesajelor offline și analiza livrării, lucruri care nu există în APNs pur.
Da, prin Firebase Console în secțiunea Cloud Messaging se pot trimite manual notificări pe dispozitive selectate, topicuri sau segmente de audiență. Funcția este potrivită pentru testare și trimiteri unice, dar nu înlocuiește integrarea server-side pentru aplicațiile de producție.
Abonați-vă la actualizările tokenului prin onNewToken în FirebaseMessagingService (Android) sau MessagingDelegate (iOS). La schimbarea tokenului, trimiteți noul token pe server și ștergeți-l pe cel vechi. Serverul trebuie să actualizeze baza de date și să înceteze încercările de trimitere pe tokenul învechit.
FCM stochează mesajul în coadă până la 28 de zile și îl livrează la restabilirea conexiunii. Pentru mesajele notification, doar ultimul mesaj pentru fiecare grup de colapsare este colapsat. Mesajele data sunt stocate separat și livrate în ordinea trimiterii fără colapsare.
FCM este complet gratuit fără limitări la numărul de mesaje. Utilizarea FCM nu este tarifată nici în planul Spark, nici în planul Blaze. Limitările se aplică doar dimensiunii payload: până la 4 KB pentru mesajele notification și până la 2 KB pentru mesajele data.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și