Configurare un'app client Firebase Cloud Messaging su Flutter

Per configurare un client FCM su Flutter, segui questi passaggi.

Configurazione e requisiti specifici della piattaforma

Alcuni dei passaggi richiesti dipendono dalla piattaforma scelta come target.

iOS+

Attivare le funzionalità dell'app in Xcode

Prima che l'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 del servizio APN su Firebase. Se non disponi già di un certificato del servizio APN, creane uno nell'Apple Developer Member Center.

  1. All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, Impostazioni progetto e poi la scheda Cloud Messaging.
  2. Seleziona il pulsante Carica certificato per il certificato di sviluppo, per il certificato di produzione o per 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 Flutter FCM sui dispositivi Apple, non devi disattivare lo scambio di metodi. Lo scambio è obbligatorio e, senza di esso, le funzionalità di Firebase principali 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 anche Google Play Services oppure un emulatore con Android 4.4 e API Google. Tieni presente che non sei limitato a implementare le tue app per Android tramite Google Play Store.

Le app che si basano sull'SDK Play Services devono sempre controllare se sul dispositivo è 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() assicura che l'app possa essere utilizzata solo con un controllo andato a buon fine. Il controllo onResume() garantisce che, se l'utente torna all'app in esecuzione tramite qualche altro mezzo, ad esempio tramite il pulsante Indietro, il controllo venga comunque eseguito.

Se il dispositivo non ha 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

Configura le credenziali web con FCM

L'interfaccia web di FCM utilizza credenziali web denominate "Voluntary Application Server Identification" o chiavi "VAPID" per autorizzare l'invio delle richieste ai servizi web push supportati. Per abbonare 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 visualizza un avviso che indica che la coppia di chiavi è stata generata e mostra la stringa della chiave pubblica e la data di aggiunta.

Importa una coppia di chiavi esistente

Se hai già una coppia di chiavi che utilizzi con la tua app web, puoi importarla in FCM in modo da raggiungere le istanze della tua app web esistenti tramite le API FCM. Per importare le chiavi, devi disporre di accesso a livello di proprietario al progetto Firebase. Importa le chiavi pubblica e privata esistenti in formato con codifica Base64 sicura per l'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, consulta Chiavi del server delle applicazioni.

Installa il plug-in FCM

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

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

    flutter pub add firebase_messaging
    
  3. Al termine, ricostruisci 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é per completare questo tutorial dovrai inserire il token in un campo della console Notifiche, assicurati di copiarlo 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 di notifica non è stata concessa, questo metodo chiederà all'utente le autorizzazioni di notifica. 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.
    });

Impedire l'inizializzazione automatica

Quando viene generato un token di registrazione FCM, la libreria carica i dati dell'identificatore e della configurazione in Firebase. Se preferisci impedire la generazione automatica dei token, disattiva l'inizializzazione automatica in fase di compilazione.

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 disattivare entrambi) aggiungendo questi valori dei metadati a 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 in fase di runtime

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

await FirebaseMessaging.instance.setAutoInitEnabled(true);

Una volta impostato, questo valore rimane invariato dopo i riavvii dell'app.

Passaggi successivi

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

Per aggiungere altri comportamenti più avanzati alla tua app, hai bisogno di un'implementazione del server.

Poi, nel client dell'app: