Firebase Cloud Messaging: cos'è, principio di funzionamento e notifiche push

Autore: IT Sectr Pubblicato: 2026-04-29 Tempo di lettura: 9 min

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

  • FCM — un servizio gratuito di notifiche push di Google con supporto per Android, iOS e Web tramite un'API unificata e Firebase Console.
  • Tipi di messaggi — i messaggi notification vengono visualizzati automaticamente dal sistema; i messaggi data consentono di inviare JSON arbitrario e elaborarlo nell'applicazione.
  • Token dei dispositivi — ogni applicazione riceve un Registration Token unico che il server utilizza per l'invio mirato di notifiche push.
  • Priorità di consegna — le priorità normal e high determinano il comportamento del sistema durante il risparmio energetico: i messaggi high riattivano il dispositivo dalla modalità Doze.
  • Argomenti e gruppi — FCM supporta le sottoscrizioni ad argomenti per l'invio massivo e Device Groups per l'invio a più dispositivi di un singolo utente.

Cos'è Firebase Cloud Messaging

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.

Funzionalità chiave di FCM

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à.

Vantaggi rispetto a una soluzione personalizzata

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.

Come funziona Firebase Cloud Messaging

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.

Registrazione del dispositivo e ottenimento del token

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.

Ciclo di vita del messaggio

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.

Tipi di messaggi in FCM

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.

Messaggi notification

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.

Messaggi data

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.

Messaggi combinati

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.

TipoAuto-visualizzazioneElaborazione in backgroundEsempio
NotificationSì, dal sistemaAutomatica, senza codiceNotifica push di benvenuto
DataNoTramite callback dell'applicazioneSincronizzazione dati in background
CombinatoSì, parte notificationParte data all'aperturaNotifica + link ordine

Configurazione di FCM in Android

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.

Inizializzazione e ottenimento del token

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.

kotlin
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)
    }
}

Registrazione del servizio nel manifesto

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.

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>

Configurazione di FCM in iOS

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.

Configurazione APNs e registrazione delle notifiche

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.

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
    }
}

Gestione delle notifiche in arrivo

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.

Invio di messaggi dal server

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.

Formato della richiesta HTTP v1

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.

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: "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)
    })

Argomenti e invio massivo

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

Qual è la differenza tra FCM e APNs?

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.

È possibile inviare messaggi FCM senza server?

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.

Cosa fare se il token del dispositivo cambia?

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.

Come gestisce FCM i dispositivi offline?

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.

Quanto costa utilizzare Firebase Cloud Messaging?

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

  • Firebase Cloud Messaging è un servizio multipiattaforma di notifiche push di Google che supporta Android, iOS, Web e Unity tramite un'API unificata.
  • L'architettura di FCM è composta dal server del fornitore, dall'infrastruttura Firebase e dall'applicazione client, garantendo una consegna affidabile dei messaggi attraverso la rete globale di Google.
  • Tre tipi di messaggi — notification (visualizzazione automatica), data (payload arbitrario senza UI) e combinato (entrambi i tipi in un messaggio).
  • FCM su Android funziona tramite FirebaseMessagingService con connessione propria, mentre su iOS utilizza APNs come trasporto con intercettazione del token tramite MessagingDelegate.
  • L'API HTTP v1 è raccomandata per l'invio lato server con autenticazione OAuth 2.0 tramite Service Account e supporto dell'analisi di consegna.
  • Gli argomenti consentono di inviare messaggi a gruppi di iscritti, e le condizioni permettono di combinare più argomenti per una segmentazione precisa.
  • FCM è gratuito senza limiti di messaggi, con memorizzazione dei messaggi offline fino a 28 giorni e dimensione massima del payload di 4 KB.

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.

Discuti il progetto

Leggi anche