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 test dal composer 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 e potrebbe includere passaggi che hai già completato se hai configurato un'app Flutter per FCM.

Installare il plug-in FCM

  1. Installa e inizializza gli SDK Firebase per Flutter se non l'hai ancora fatto.

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

    flutter pub add firebase_messaging
    
  3. Al termine, ricompila 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 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 alle notifiche non è stata concessa, questo metodo chiederà all'utente le autorizzazioni alle notifiche. In caso contrario, restituisce un token o rifiuta il futuro 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 da remoto.

  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 poi 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 etichettato Aggiungi un token di registrazione FCM, inserisci il token di registrazione che hai 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 sulla distribuzione dei messaggi alla tua app, consulta la dashboard dei report 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 per Android.

Gestione dell'interazione

Quando gli utenti toccano una notifica, il comportamento predefinito sia su Android che su iOS è l'apertura dell'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 quando l'applicazione si apre. Ad esempio, se viene inviato un nuovo messaggio di chat utilizzando una notifica e l'utente lo seleziona, potresti voler aprire la conversazione specifica quando l'applicazione si apre.

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, 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 ottimale ai tuoi utenti, devi gestire entrambi gli scenari. L'esempio di codice di seguito mostra come 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 gestione dell'interazione dipende dalla configurazione dell'applicazione. L'esempio precedente mostra un esempio di base di utilizzo di un StatefulWidget.

Passaggi successivi

Inviare messaggi alle app in primo piano

Una volta inviati 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 un comportamento più avanzato alla tua app, devi implementare un server.

Poi, nel client dell'app: