Inviare un messaggio di prova a un'app in background

Per iniziare a utilizzare FCM, crea il caso d'uso più semplice: invia un messaggio di notifica di prova dal Editor di notifiche a un dispositivo di sviluppo quando l'app è in background sul dispositivo. Questa pagina elenca tutti i passaggi per farlo, dalla configurazione alla verifica. Potrebbe includere passaggi che hai già completato se hai configurato un'app Flutter per FCM.

Installa il plug-in FCM

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

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

Inviare 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 da remoto.

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

  3. Nella console Firebase, apri la pagina Messaggistica.

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

    1. Seleziona Messaggi di notifica Firebase e Crea.
  5. In caso contrario, 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 a destra.

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

  9. Seleziona Testa.

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

Per informazioni sull'invio dei messaggi alla tua app, consulta la dashboard dei report di FCM, che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android, insieme ai dati relativi alle "impressioni" (notifiche visualizzate dagli utenti) per le app per Android.

Gestione dell'interazione

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

A seconda dei contenuti 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 quando si apre l'applicazione.

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

  1. getInitialMessage(): se l'applicazione viene aperta da uno stato di terminazione, questo metodo restituisce un Future contenente un RemoteMessage. Una volta consumato, il 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 agli utenti, devi 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("...");
  }
}

La modalità di gestione dell'interazione dipende dalla configurazione dell'applicazione. L'esempio riportato sopra mostra un esempio di base dell'utilizzo di un StatefulWidget.

Passaggi successivi

Inviare 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 inviarli alle app in primo piano.

Andare oltre i messaggi di notifica

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

Poi, nel client dell'app: