Configurare un'app client Firebase Cloud Messaging su Flutter

Segui questi passaggi per configurare un client FCM su Flutter.

Configurazione e requisiti specifici della piattaforma

Alcuni passaggi obbligatori dipendono dalla piattaforma di destinazione.

iOS+

Attivare le funzionalità dell'app in Xcode

Prima che la tua applicazione possa iniziare a ricevere messaggi, devi attivare le notifiche push e le modalità in background nel progetto Xcode.

  1. Apri lo spazio di lavoro del progetto Xcode (ios/Runner.xcworkspace).
  2. Attiva le notifiche push.
  3. Attiva le modalità di esecuzione in background Recupero in background e Notifiche remote.

Carica la chiave di autenticazione del servizio APN

Prima di utilizzare FCM, carica il certificato APN su Firebase. Se non hai già un certificato APN, creane uno nel Member Center per sviluppatori Apple.

  1. All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e poi la scheda Cloud Messaging.
  2. Seleziona il pulsante Carica certificato per il certificato di sviluppo, il certificato di produzione o entrambi. È obbligatorio indicarne almeno uno.
  3. Per ogni certificato, seleziona il file .p12 e fornisci la password, se presente. Assicurati che l'ID bundle di questo certificato corrisponda all'ID bundle della tua app. Seleziona Salva.

Swizzling del metodo

Per utilizzare il plug-in FCM Flutter sui dispositivi Apple, non devi disattivare lo swizzling dei metodi. Lo swizzling è obbligatorio e, senza di esso, le funzionalità chiave di Firebase, come la gestione dei token FCM, non funzionano correttamente.

Android

Google Play Services

I client FCM richiedono dispositivi con Android 4.4 o versioni successive su cui sia installato Google Play Services oppure un emulatore con Android 4.4 con le API di Google. Tieni presente che non sei limitato all'implementazione delle tue app per Android tramite Google Play Store.

Le app che si basano sull'SDK Play Services devono sempre verificare che sul dispositivo sia presente un APK di Google Play Services compatibile prima di accedere alle funzionalità di Google Play Services. Ti consigliamo di farlo in due punti: nel metodo onCreate() dell'attività principale e nel metodo onResume(). Il controllo in onCreate() garantisce che l'app non possa essere utilizzata senza un controllo riuscito. Il controllo onResume() garantisce che, se l'utente torna all'app in esecuzione in un altro modo, ad esempio tramite il pulsante Indietro, il controllo venga comunque eseguito.

Se il dispositivo non dispone di una versione compatibile di Google Play Services, la tua app può chiamare GoogleApiAvailability.makeGooglePlayServicesAvailable() per consentire agli utenti di scaricare Google Play Services dal Play Store.

Web

Configurare le credenziali web con FCM

L'interfaccia web FCM utilizza credenziali web chiamate "Voluntary Application Server Identification" o chiavi "VAPID" per autorizzare le richieste di invio ai servizi push web supportati. Per iscrivere la tua app alle notifiche push, devi associare una coppia di chiavi al tuo progetto Firebase. Puoi generare una nuova coppia di chiavi o importare quella esistente tramite la console Firebase.

Genera una nuova coppia di chiavi
  1. Apri la scheda Cloud Messaging del riquadro Impostazioni della console Firebase e scorri fino alla sezione Configurazione web.

  2. Nella scheda Certificati web push, fai clic su Genera coppia di chiavi. La console mostra un avviso che indica che la coppia di chiavi è stata generata e visualizza la stringa della chiave pubblica e la data di aggiunta.

Importare una coppia di chiavi esistente

Se disponi di una coppia di chiavi esistente che utilizzi già con la tua app web, puoi importarla in FCM per raggiungere le istanze dell'app web esistenti tramite le API FCM. Per importare le chiavi, devi disporre dell'accesso a livello di proprietario al progetto Firebase. Importa la chiave pubblica e quella privata esistenti in formato con codifica Base64 sicura per gli URL:

  1. Apri la scheda Cloud Messaging del riquadro Impostazioni della console Firebase e scorri fino alla sezione Configurazione web.

  2. Nella scheda Certificati push web, trova e seleziona il testo del link "importa una coppia di chiavi esistente".

  3. Nella finestra di dialogo Importa una coppia di chiavi, fornisci le chiavi pubblica e privata nei campi corrispondenti e fai clic su Importa. La console mostra la stringa della chiave pubblica e la data di aggiunta.

Per ulteriori informazioni sul formato delle chiavi e su come generarle, vedi Chiavi del server delle applicazioni.

Installare il plug-in FCM

  1. Installa e inizializza i plug-in Firebase per Flutter, se non l'hai ancora fatto.

  2. Dalla radice del progetto Flutter, esegui questo comando per installare il plug-in:

    flutter pub add firebase_messaging
    
  3. Al termine, ricompila l'applicazione Flutter:

    flutter run
    

Accedere al token di registrazione

Per inviare un messaggio a un dispositivo specifico, devi conoscere il token di registrazione del dispositivo. Poiché dovrai inserire il token in un campo della console delle notifiche per completare questo tutorial, assicurati di copiare il token o di archiviarlo in modo sicuro dopo averlo recuperato.

Per recuperare il token di registrazione corrente per un'istanza dell'app, chiama getToken(). Se l'autorizzazione alle notifiche non è stata concessa, questo metodo chiederà all'utente le autorizzazioni alle notifiche. In caso contrario, restituisce un token o rifiuta il futuro a causa di un errore.

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, ensure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

Sulle piattaforme web, passa la chiave pubblica VAPID a getToken():

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

Per ricevere una notifica ogni volta che il token viene aggiornato, iscriviti allo stream onTokenRefresh:

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

Impedisci l'inizializzazione automatica

Quando viene generato un token di registrazione FCM, la libreria carica l'identificatore e i dati di configurazione su Firebase. Se preferisci impedire la generazione automatica dei token, disattiva l'inizializzazione automatica al momento della creazione.

iOS

Su iOS, aggiungi un valore dei metadati a Info.plist:

FirebaseMessagingAutoInitEnabled = NO

Android

Su Android, disattiva la raccolta di Analytics e l'inizializzazione automatica di FCM (devi disattivarle entrambe) aggiungendo questi valori dei metadati al tuo AndroidManifest.xml:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Riattivare l'inizializzazione automatica di FCM al runtime

Per attivare l'inizializzazione automatica per un'istanza di app specifica, chiama setAutoInitEnabled():

await FirebaseMessaging.instance.setAutoInitEnabled(true);

Una volta impostato, questo valore viene mantenuto anche dopo il riavvio dell'app.

Passaggi successivi

Dopo aver configurato l'app client, puoi iniziare a inviare messaggi downstream con lo strumento di composizione delle notifiche. Vedi Inviare un messaggio di prova a un'app in background.

Per aggiungere un comportamento più avanzato alla tua app, devi implementare un server.

Poi, nel client dell'app: