Invia un messaggio di prova a un'app in background

Per iniziare con FCM, crea il caso d'uso più semplice: inviare un messaggio di notifica di prova dal compositore delle notifiche a un dispositivo di sviluppo quando l'app è in background sul dispositivo. Questa pagina elenca tutti i passaggi per raggiungere questo obiettivo, dalla configurazione alla verifica: potrebbe coprire i passaggi già completati se hai configurato un'app Flutter per FCM.

Installa il plugin FCM

  1. Installa e inizializza gli SDK 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.

final fcmToken = await FirebaseMessaging.instance.getToken();

Invia un messaggio di notifica di prova

  1. Installa ed esegui l'app sul dispositivo di destinazione. Sui dispositivi Apple dovrai accettare la richiesta di autorizzazione per ricevere notifiche remote.

  2. Assicurati che l'app sia in background sul dispositivo.

  3. Nella console Firebase, apri la pagina Messaggistica .

  4. Se questo è il tuo primo messaggio, seleziona Crea la tua prima campagna .

    1. Seleziona Messaggi di notifica Firebase e seleziona Crea .
  5. Altrimenti, nella scheda Campagne , seleziona Nuova campagna e poi Notifiche .

  6. Inserisci il testo del messaggio. Tutti gli altri campi sono facoltativi.

  7. Seleziona Invia messaggio di prova dal riquadro di destra.

  8. Nel campo denominato Aggiungi un token di registrazione FCM , inserisci il token di registrazione ottenuto in una sezione precedente di questa guida.

  9. Seleziona Prova .

Dopo aver selezionato Test , il dispositivo client di destinazione (con l'app in background) dovrebbe ricevere la notifica.

Per informazioni dettagliate sulla consegna dei messaggi alla tua app, consulta il dashboard dei rapporti FCM , che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android, insieme ai dati per le "impressioni" (notifiche visualizzate dagli utenti) per le app Android.

Gestire l'interazione

Quando gli utenti toccano una notifica, il comportamento predefinito sia su Android che su iOS è aprire l'applicazione. Se l'applicazione viene terminata, verrà avviata e, se è in background, verrà portata in primo piano.

A seconda del contenuto di una notifica, potresti voler gestire l'interazione dell'utente all'apertura dell'applicazione. Ad esempio, se un nuovo messaggio di chat viene inviato utilizzando una notifica e l'utente lo seleziona, potresti voler aprire la conversazione specifica all'apertura dell'applicazione.

Il pacchetto firebase-messaging fornisce due modi per gestire questa interazione:

  1. getInitialMessage() : se l'applicazione viene aperta da uno stato terminato, questo metodo restituisce un Future contenente un RemoteMessage . Una volta consumato, RemoteMessage verrà rimosso.
  2. onMessageOpenedApp : un Stream che pubblica un RemoteMessage quando l'applicazione viene aperta da uno stato in background.

Per garantire un'esperienza fluida ai tuoi utenti, dovresti gestire entrambi gli scenari. L'esempio di codice riportato di seguito illustra come è possibile ottenere questo risultato:

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

Il modo in cui gestisci l'interazione dipende dalla configurazione dell'applicazione. L'esempio sopra mostra un esempio di base dell'utilizzo di StatefulWidget .

Prossimi passi

Invia messaggi alle app in primo piano

Dopo aver inviato correttamente i messaggi di notifica mentre l'app è in background, consulta Ricevere messaggi in un'app Flutter per iniziare a inviare messaggi alle app in primo piano.

Vai oltre i messaggi di notifica

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

Quindi, nel client dell'app: