Firebase Cloud Messaging (FCM) è un servizio multipiattaforma di consegna di notifiche push e messaggi di Google, progettato per applicazioni mobili e web. FCM garantisce un trasferimento affidabile dei dati tra il server e i dispositivi client senza la necessità di mantenere una connessione di rete permanente. Secondo Firebase Documentation, 2026, più di 300 miliardi di messaggi passano ogni giorno attraverso l'infrastruttura FCM in tutto il mondo. Il servizio supporta sia le notifiche con visualizzazione automatica che i messaggi data per il trasferimento nascosto di dati in background.
Punti chiave
Firebase Cloud Messaging è un servizio cloud di Google che garantisce la consegna di notifiche push e messaggi data tra il server dell'applicazione e i dispositivi client. Il servizio ha sostituito il vecchio Google Cloud Messaging (GCM) ed è diventato la soluzione standard per la consegna push nell'ecosistema Firebase. FCM supporta Android, iOS, Web e Unity, fornendo un'interfaccia di invio unificata indipendentemente dalla piattaforma di destinazione.
Il servizio offre diversi meccanismi di consegna dei messaggi, ciascuno dei quali risolve un compito specifico. I messaggi notification vengono visualizzati automaticamente dal sistema alla ricezione — lo sviluppatore non deve scrivere codice per mostrare la notifica. I messaggi data trasmettono un payload arbitrario sotto forma di coppie chiave-valore e vengono elaborati all'interno dell'applicazione. I messaggi combinati contengono parti visibili e nascoste per la massima flessibilità.
Implementare un proprio server push richiede di mantenere una connessione TCP costante con ogni dispositivo, il che è inefficiente e poco sicuro. FCM utilizza l'infrastruttura unificata di Google che mantiene connessioni con miliardi di dispositivi simultaneamente. Il servizio gestisce automaticamente i tentativi di reinvio, le code di messaggi e il bilanciamento del carico, liberando lo sviluppatore dalla necessità di risolvere questi compiti autonomamente.
L'architettura di FCM è composta da tre componenti chiave: il server del fornitore (il tuo backend), il server Firebase Cloud Messaging e l'applicazione client sul dispositivo. Quando il server invia un messaggio, arriva prima all'infrastruttura FCM, che lo instrada al dispositivo di destinazione. Se il dispositivo è offline, FCM memorizza il messaggio in una coda e lo consegna al ripristino della connessione.
Al primo avvio, l'applicazione chiama l'SDK Firebase, che registra il dispositivo presso il servizio FCM e riceve un Registration Token unico. Questo token è una stringa di circa 150 caratteri che identifica una specifica istanza dell'applicazione su un dispositivo specifico. Il token può cambiare in caso di reinstallazione dell'applicazione, cancellazione dei dati o ripristino da backup — lo sviluppatore deve gestire l'aggiornamento del token tramite il delegato onNewToken.
Quando il server invia una richiesta tramite l'API FCM, il messaggio attraversa diverse fasi. Ricezione e validazione — FCM verifica la correttezza della richiesta e l'esistenza del dispositivo di destinazione. Coda — se il dispositivo non è disponibile, il messaggio entra in una coda di archiviazione. Instradamento — FCM determina il canale di consegna ottimale (WiFi o dati mobili). Consegna — il sistema trasmette il messaggio all'applicazione di destinazione. Dopo la consegna riuscita, FCM restituisce un identificatore del messaggio al server.
Firebase Cloud Messaging supporta tre tipi di messaggi, ciascuno con le proprie caratteristiche di elaborazione lato client. I messaggi notification vengono gestiti dal servizio di sistema Google Play Services su Android e APNs su iOS e vengono visualizzati automaticamente come banner push. I messaggi data vengono consegnati direttamente all'applicazione e elaborati tramite il callback onMessageReceived su Android e application(_:didReceiveRemoteNotification:) su iOS.
Un messaggio notification contiene campi predefiniti: titolo, corpo, URL dell'immagine e suono della notifica. Il sistema crea e visualizza automaticamente la notifica nel vassoio di sistema, anche se l'applicazione è in background o terminata. L'utente vede un banner standard con titolo e testo e, toccandolo, l'applicazione si apre con i dati inviati nel payload. Se l'applicazione è attiva, il messaggio notification può essere intercettato ed elaborato nel codice.
Un messaggio data è un insieme personalizzato di coppie chiave-valore senza campi predefiniti. Il payload non viene elaborato automaticamente dal sistema — l'applicazione riceve i dati grezzi e può interpretarli arbitrariamente. I messaggi data vengono utilizzati per la sincronizzazione dei dati in background, l'aggiornamento della cache locale, l'attivazione della sincronizzazione o l'invio di comandi senza mostrare una notifica. Su Android, il messaggio data viene sempre consegnato, anche se l'applicazione è terminata o in background.
FCM consente di inviare un messaggio che contiene sia una parte notification (per la visualizzazione) sia una parte data (per l'elaborazione). Il payload combinato include sia i campi notification predefiniti che le chiavi data arbitrarie. Il sistema mostra la notifica dalla parte notification, mentre la parte data viene trasmessa negli extra dell'intent dell'applicazione all'apertura. Ciò è utile per scenari in cui è necessario mostrare una notifica all'utente e contemporaneamente passare il contesto per navigare verso una schermata specifica.
| Tipo | Auto-visualizzazione | Elaborazione in background | Esempio |
|---|---|---|---|
| Notification | Sì, dal sistema | Automatica, senza codice | Notifica push di benvenuto |
| Data | No | Tramite callback dell'applicazione | Sincronizzazione dati in background |
| Combinato | Sì, parte notification | Parte data all'apertura | Notifica + link ordine |
L'integrazione di FCM in Android inizia collegando l'SDK Firebase tramite il file build.gradle a livello di applicazione. Dopo aver aggiunto le dipendenze e il file google-services.json, l'applicazione riceve automaticamente un Registration Token, che viene trasmesso tramite il callback FirebaseMessagingService. Per ricevere le notifiche, è necessario creare un servizio che estenda FirebaseMessagingService e registrarlo in AndroidManifest.xml.
Dopo aver collegato l'SDK Firebase, il token del dispositivo viene generato automaticamente senza codice aggiuntivo. Il token è disponibile tramite FirebaseMessaging.getInstance().token, che restituisce un Task<String>. Per tracciare gli aggiornamenti del token, il metodo onNewToken viene sovrascritto nel servizio. Il token deve essere inviato al server del fornitore affinché il server possa inviare notifiche push a questo dispositivo.
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Nuovo messaggio"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Il servizio per ricevere messaggi FCM deve essere registrato in AndroidManifest.xml con gli intent-filter appropriati. Aggiungi il tag service con il permesso INTERNET e l'azione specificata. Senza la registrazione del servizio, i messaggi non verranno consegnati all'applicazione in background. Per visualizzare le notifiche su Android 13+, è necessario il permesso 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>
L'integrazione di FCM in iOS richiede configurazione sia lato Apple Push Notification Service (APNs) che in Firebase Console. A differenza di Android, dove FCM gestisce la connessione direttamente, in iOS FCM utilizza APNs come livello di trasporto. L'applicazione si registra per ricevere notifiche push tramite UIApplication.shared.registerForRemoteNotifications, e l'SDK Firebase intercetta il token del dispositivo ricevuto e lo collega al Registration Token FCM.
Affinché FCM funzioni su iOS, è necessario caricare una chiave o un certificato APNs in Firebase Console. La chiave APNs è un metodo di autenticazione moderno senza certificati (raccomandato da Apple). La chiave viene creata nell'Apple Developer Portal nella sezione Keys e caricata nelle impostazioni di Cloud Messaging in Firebase Console. Dopo la configurazione APNs, l'applicazione richiede l'autorizzazione per le notifiche tramite UNUserNotificationCenter e si registra tramite 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
}
}
Per gestire le notifiche ricevute, viene implementato il delegato UNUserNotificationCenter. Il metodo willPresent viene chiamato quando una notifica viene ricevuta con l'applicazione attiva — qui è possibile mostrare una notifica personalizzata in-app o ignorare il banner di sistema. Il metodo didReceive viene chiamato quando l'utente tocca la notifica — qui si naviga verso la schermata corrispondente. Per i messaggi data viene utilizzato il delegato MessagingDelegate, che riceve il payload alla ricezione di un messaggio FCM in background.
L'invio lato server dei messaggi FCM viene effettuato tramite l'API HTTP v1 di Firebase Cloud Messaging o l'API legacy. L'API HTTP v1 è il metodo raccomandato, utilizza l'autenticazione OAuth 2.0 tramite Service Account e supporta tutte le funzionalità moderne di FCM, inclusa l'analisi della consegna e i test A/B delle notifiche. La richiesta viene inviata con metodo POST all'endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Il corpo della richiesta contiene un oggetto JSON con le informazioni del messaggio: target (token, argomento o condizione), notification (per la visualizzazione) e data (payload personalizzato). L'autenticazione avviene tramite una chiave JSON di Service Account caricata nelle variabili d'ambiente del server. Il token di accesso viene generato utilizzando la libreria google-auth-library. Google raccomanda di utilizzare Firebase Admin SDK per la gestione automatica dell'autenticazione e dei tentativi.
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: "Sconto del 20%", body: "Su tutti i servizi oggi" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Inviato con successo:", response)
})
.catch(error => {
console.log("Errore di invio:", error)
})
Per inviare notifiche a un gruppo di utenti, FCM supporta le sottoscrizioni ad argomenti. Un argomento (topic) è un canale nominato a cui l'applicazione client si sottoscrive tramite FirebaseMessaging.getInstance().subscribeToTopic(). Il server può inviare un messaggio a un argomento e verrà consegnato a tutti i dispositivi sottoscritti. Gli argomenti sono adatti per newsletter, notifiche promozionali e push basati su eventi. Per una segmentazione più precisa, vengono utilizzate condizioni basate su più argomenti con operatori logici.
Domande frequenti
FCM funziona su Android tramite l'infrastruttura proprietaria di Google, mentre su iOS utilizza APNs come protocollo di trasporto. FCM fornisce un'API unificata per entrambe le piattaforme, archiviazione automatica dei messaggi offline e analisi della consegna, che non sono disponibili nel puro APNs.
Sì, tramite Firebase Console nella sezione Cloud Messaging è possibile inviare manualmente notifiche a dispositivi, argomenti o segmenti di pubblico selezionati. Questa funzione è adatta per test e invii occasionali, ma non sostituisce l'integrazione server per applicazioni in produzione.
Sottoscrivi gli aggiornamenti del token tramite onNewToken in FirebaseMessagingService (Android) o MessagingDelegate (iOS). Quando il token cambia, invia il nuovo token al server e rimuovi quello vecchio. Il server deve aggiornare il database e interrompere i tentativi di invio al token obsoleto.
FCM memorizza il messaggio in una coda fino a 28 giorni e lo consegna al ripristino della connessione. Per i messaggi notification, solo l'ultimo messaggio per ogni gruppo di collapse viene collassato. I messaggi data vengono memorizzati separatamente e consegnati nell'ordine di invio senza collapse.
FCM è completamente gratuito senza limiti sul numero di messaggi. L'utilizzo di FCM non viene addebitato né nel piano Spark né nel piano Blaze. Esistono solo limiti sulla dimensione del payload: fino a 4 KB per i messaggi notification e fino a 2 KB per i messaggi data.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche