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 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 APN su Firebase. Se non hai già un certificato APNs, creane uno nel Centro per gli sviluppatori Apple.

  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à 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 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 verificare la presenza di un APK di Google Play Services compatibile sul dispositivo 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 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

Configurare le credenziali web con FCM

L'interfaccia web di FCM utilizza le credenziali web denominate "Voluntary Application Server Identification" o chiavi "VAPID" per autorizzare l'invio di richieste ai servizi push web 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 nel 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 nel 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 progetto Flutter, esegui il seguente 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é dovrai inserire il token in un campo della Console delle notifiche per completare questo tutorial, assicurati di copiarlo o di memorizzarlo 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 su Firebase l'identificatore e i dati di configurazione. 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: