Configura 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 di destinazione.

iOS+

Abilita le funzionalità dell'app in Xcode

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

  1. Apri l'area di lavoro del progetto Xcode ( ios/Runner.xcworkspace ).
  2. Abilita le notifiche push .
  3. Abilita le modalità di recupero in background e di esecuzione in background delle notifiche remote .

Carica la chiave di autenticazione APN

Prima di utilizzare FCM, carica il certificato APN su Firebase. Se non disponi già di un certificato APN, creane uno nell'Apple Developer Member Center .

  1. All'interno del tuo progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e quindi seleziona la scheda Messaggistica cloud .
  2. Seleziona il pulsante Carica certificato per il tuo certificato di sviluppo, il tuo certificato di produzione o entrambi. Ne è richiesto almeno uno.
  3. Per ciascun certificato, seleziona il file .p12 e fornisci la password, se presente. Assicurati che l'ID bundle per questo certificato corrisponda all'ID bundle della tua app. Seleziona Salva .

Metodo vorticoso

Per utilizzare il plugin FCM Flutter sui dispositivi Apple, non è necessario disattivare il metodo swizzling. È necessario lo swizzling e, senza di esso, le funzionalità chiave di Firebase come la gestione dei token FCM non funzionano correttamente.

Androide

Servizi di Google Play

I client FCM richiedono dispositivi con Android 4.4 o versioni successive su cui siano installati anche i servizi Google Play o un emulatore con Android 4.4 con API Google. Tieni presente che non sei limitato a distribuire le tue app Android tramite Google Play Store.

Le app che si basano sull'SDK di Play Services devono sempre verificare la disponibilità di un APK di Google Play Services compatibile sul dispositivo prima di accedere alle funzionalità di Google Play Services. Si consiglia di farlo in due posti: nel metodo onCreate() dell'attività principale e nel relativo metodo onResume() . Il check-in onCreate() garantisce che l'app non possa essere utilizzata senza un controllo positivo. Il controllo in onResume() garantisce che se l'utente ritorna all'app in esecuzione tramite altri mezzi, ad esempio tramite il pulsante Indietro, il controllo viene comunque eseguito.

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

ragnatela

Configura le credenziali Web con FCM

L'interfaccia Web FCM utilizza credenziali Web denominate "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 la coppia di chiavi 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 , fare clic su Genera coppia di chiavi . La console visualizza un avviso che informa 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 disponi di una coppia di chiavi esistente che stai già utilizzando con la tua app Web, puoi importarla in FCM in modo da poter raggiungere le istanze dell'app Web esistenti tramite le API FCM. Per importare le chiavi, devi avere accesso a livello di proprietario al progetto Firebase. Importa la tua chiave pubblica e privata esistente nel formato codificato sicuro URL base64:

  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 , trova e seleziona il testo del collegamento "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 visualizza la stringa della chiave pubblica e la data di aggiunta.

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

Installa il plugin FCM

  1. Installa e inizializza i plugin Firebase per Flutter se non lo hai già fatto.

  2. Dalla radice del tuo progetto Flutter, esegui il comando seguente per installare il plugin:

    flutter pub add firebase_messaging
    
  3. Una volta completato, ricostruisci la tua applicazione Flutter:

    flutter run
    

Accedi al token di registrazione

Per inviare un messaggio a un dispositivo specifico, devi conoscere il token di registrazione di quel dispositivo. Poiché per completare questo tutorial dovrai inserire il token in un campo nella console delle notifiche, 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 di notifica non è stata concessa, questo metodo chiederà all'utente le autorizzazioni di notifica. Altrimenti restituisce un token o rifiuta il future 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 tua 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 l'identificatore e i dati di configurazione su Firebase. Se preferisci impedire la generazione automatica dei token, disabilita l'inizializzazione automatica in fase di compilazione.

iOS

Su iOS, aggiungi un valore di metadati al tuo Info.plist :

FirebaseMessagingAutoInitEnabled = NO

Androide

Su Android, disabilita la raccolta di Analytics e l'inizializzazione automatica di FCM (devi disabilitarle entrambe) aggiungendo questi valori di 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" />

Riabilitare l'avvio automatico di FCM in fase di runtime

Per abilitare l'avvio automatico per un'istanza specifica dell'app, chiama setAutoInitEnabled() :

await FirebaseMessaging.instance.setAutoInitEnabled(true);

Questo valore persiste tra i riavvii dell'app una volta impostato.

Prossimi passi

Dopo aver configurato l'app client, sei pronto per iniziare a inviare messaggi downstream con il compositore di notifiche . Consulta Inviare un messaggio di prova a un'app in background .

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

Quindi, nel client dell'app: