FCM (Firebase Cloud Messaging) este un serviciu cross-platform de la Google pentru livrarea notificărilor push și transmiterea datelor între server și aplicațiile mobile. Suportă Android, iOS și platforme web printr-un API unic. Conform Firebase Documentation, FCM procesează peste 1 miliard de mesaje zilnic în întreaga lume.
Principalele puncte
Firebase Cloud Messaging (FCM) este un serviciu cloud de la Google care asigură livrarea fiabilă a notificărilor push și a mesajelor cu date pe dispozitivele mobile. Cunoscut anterior ca Google Cloud Messaging (GCM), FCM a devenit instrumentul principal pentru notificări cross-platform în ecosistemul Firebase.
FCM selectează automat canalul optim de livrare în funcție de platformă: pe Android utilizează propria conexiune FCM, pe iOS — APNS (prin gateway-ul FCM). Dezvoltatorul nu trebuie să implementeze două integrări diferite — FCM preia rutarea.
Serviciul oferă un REST API unic și Admin SDK pentru trimiterea mesajelor. Acest lucru permite trimiterea notificărilor din partea serverului fără legătura cu o platformă specifică a destinatarului.
FCM suportă mai multe moduri de livrare: mesaj unic către un dispozitiv specific, trimitere în grup pe subiect (topic) și trimitere segmentată pe condiții (condition). De asemenea, sunt disponibile programarea trimiterii și testarea A/B a conținutului notificărilor.
Arhitectura FCM se bazează pe trei componente: aplicația client, Firebase Connection Server și serverul aplicației (app server). Clientul se înregistrează în FCM la pornire și primește un token de înregistrare unic — un șir care identifică dispozitivul pentru această aplicație.
Serverul aplicației trimite o cerere către FCM REST API, specificând tokenul destinatarului sau subiectul. Firebase Connection Server livrează mesajul folosind o conexiune XMPP persistentă sau o cerere HTTP. Dacă dispozitivul este offline — mesajul este pus în coadă și livrat la restabilirea conexiunii.
FCM garantează livrarea cu ajutorul cozilor prioritare și al mecanismului de confirmare a primirii. Pe Android, mesajul este stocat până la 28 de zile în coadă, pe iOS — până la 4 săptămâni (prin APNS). După expirarea termenului, mesajul este șters fără notificare.
Tokenul de înregistrare se poate modifica în mai multe cazuri: la restaurarea datelor aplicației, la actualizarea la o versiune nouă sau la ștergerea cache-ului. Aplicația trebuie să implementeze FirebaseMessagingService.onNewToken pentru gestionarea actualizării tokenului și sincronizarea cu serverul.
FCM suportă două tipuri de încărcătură utilă: notification și data. Fiecare tip determină cum și când este procesat mesajul pe dispozitivul destinatarului.
| Parametru | Notification | Data |
|---|---|---|
| Afișare automată | Da, dacă aplicația este în fundal | Nu, doar în aplicație |
| Procesare | Sistem — în fundal; aplicație — în prim-plan | Întotdeauna în aplicație (onMessageReceived) |
| Dimensiune maximă | 4 KB | 4 KB |
| Chei personalizate | Limitate la câmpuri predefinite | Orice perechi cheie-valoare |
| Necesită CollapseKey | Opțional | Opțional pentru grupare |
În practică, se recomandă utilizarea mesajelor data dacă aplicația are nevoie de procesarea completă a notificării în onMessageReceived. Mesajele notification sunt potrivite pentru scenarii simple unde afișarea sistemului este suficientă.
FCM și APNS sunt cele două servicii principale de livrare push. FCM funcționează ca un gateway cross-platform, APNS — doar pentru ecosistemul Apple. Diferențele lor cheie sunt în arhitectură, cerințele de certificate și mecanismele de rutare.
Alegerea între FCM și APNS direct depinde de arhitectura proiectului. Pentru aplicații cross-platform, FCM este alegerea optimă. Pentru proiecte doar iOS, este acceptabilă lucrul direct cu APNS prin API HTTP/2.
FCM este justificat când proiectul utilizează simultan Android și iOS, precum și la necesitatea analiticii Firebase, testării A/B a notificărilor sau subiectelor fără logică de server. APNS direct este preferat pentru aplicații doar iOS cu dependențe minime și cerințe stricte privind întârzierea livrării.
Pentru conectarea FCM la o aplicație Android, trebuie adăugat Firebase SDK și configurat google-services.json în rădăcina proiectului. După înregistrarea tokenului, aplicația este gata să primească mesaje prin FirebaseMessagingService.
// build.gradle (Modul)
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)
}
}
}
După configurare, aplicația primește automat tokenul FCM la prima pornire. Tokenul trebuie trimis la serverul aplicației pentru trimiterea ulterioară a notificărilor pe acest dispozitiv.
Pe Android 8+, înainte de trimiterea unei notificări FCM cu afișare automată, trebuie creat un NotificationChannel. Mesajele notification FCM folosesc canalul cu ID implicit, dar se recomandă crearea propriului canal prin FirebaseMessagingService la primirea primului mesaj. Mesajele data nu necesită canal — aplicația decide singură cum și când să afișeze notificarea.
Pe iOS, FCM acționează ca intermediar între serverul aplicației și APNS. Firebase primește mesajul de la server, îl împachetează în format APNS și îl trimite prin gateway-ul Apple. Dezvoltatorul trebuie să configureze cheia APNS sau certificatul în consola 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")
}
}
Pe iOS, înregistrarea în APNS are loc asincron. FCM SDK primește automat tokenul APNS și îl transmite serverului Firebase. didReceiveRegistrationToken se declanșează la primirea unui nou token FCM, care combină tokenul APNS cu identificatorul proiectului.
FCM oferă consola Firebase pentru monitorizarea livrării: numărul de notificări trimise, primite și afișate. De asemenea, este disponibil un callback de stare prin Firebase Cloud Functions pentru urmărirea erorilor de livrare pe partea serverului. Metrici cheie: impressions (afișări) și opens (deschideri).
La lucrul cu FCM, este important să alegeți corect tipul de mesaj pentru fiecare scenariu. Pentru notificări simple cu afișare automată, utilizați mesaje notification. Pentru cazurile în care aplicația trebuie să proceseze datele înainte de afișare — mesaje data. Tipul mixt (notification + data) este recomandat doar dacă datele sunt necesare pentru analitică, nu pentru modificarea conținutului notificării.
Gestionați tokenurile centralizat. Stocați tokenurile curente pe server într-un tabel cu legătură la utilizator și platformă. Implementați un mecanism de curățare a tokenurilor învechite: la eroarea NotRegistered sau InvalidRegistration, ștergeți tokenul din bază. Tokenurile se schimbă rar, dar curățarea lor este un element obligatoriu al suportului FCM.
Utilizați chei de colaps (collapseKey) pentru gruparea mesajelor. Dacă trimiteți mai multe notificări de același tip (de exemplu, „actualizare curs valutar”), setați același collapseKey. FCM va livra doar ultimul mesaj din grup, ceea ce reduce încărcarea dispozitivului și nu deranjează utilizatorul cu un val de notificări.
Monitorizați livrarea prin Firebase Console și Cloud Functions. Analitica FCM arată numărul de notificări trimise, primite și afișate. Dacă procentul de afișări este sub 70% — verificați setările canalelor pe Android și permisiunile pe iOS. Livrarea scăzută este adesea legată de canale dezactivate sau interdicția notificărilor. În al cincilea rând: utilizați testarea A/B Firebase pentru optimizarea textului notificărilor și a timpului de trimitere — aceasta crește conversia deschiderilor cu 15–25% conform datelor Firebase.
Întrebări frecvente
FCM este o actualizare evolutivă a GCM (Google Cloud Messaging). FCM oferă configurare simplificată prin Firebase Console, analitică integrată, subiecte și suport pentru Web Push. GCM a fost dezactivat oficial în aprilie 2019, toate proiectele trebuie migrate la FCM.
Firebase Cloud Messaging este un serviciu gratuit fără limitări privind numărul de mesaje. Plata se percepe doar pentru utilizarea altor servicii Firebase, precum Cloud Functions sau Firestore. FCM nu necesită abonament Spark sau Blaze pentru trimiterea de bază a notificărilor.
Tokenul FCM se schimbă la: restaurarea aplicației din backup, ștergerea datelor aplicației, reinstalare, actualizare la o versiune nouă cu modificarea Sender ID. Procesați întotdeauna onNewToken în FirebaseMessagingService pentru trimiterea noului token la server.
FCM Google este blocat pe teritoriul Chinei. Pentru livrarea notificărilor în China se utilizează servicii alternative: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Pentru livrarea cross-platform se aplică servicii multi-furnizor precum Getui.
Utilizați consola Firebase încorporată: selectați „Cloud Messaging” — „Send Test Message”. Introduceți tokenul de test și trimiteți un mesaj notification. Pe dispozitiv ar trebui să apară o notificare. De asemenea, puteți monitoriza logurile FirebaseMessagingService.onMessageReceived.
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