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
Installa e inizializza gli SDK Firebase per Flutter se non l'hai ancora fatto.
Dalla radice del progetto Flutter, esegui questo comando per installare il plug-in:
flutter pub add firebase_messaging
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
Installa ed esegui l'app sul dispositivo di destinazione. Sui dispositivi Apple, dovrai accettare la richiesta di autorizzazione per ricevere notifiche da remoto.
Assicurati che l'app sia in background sul dispositivo.
Nella console Firebase, apri la pagina Messaggistica.
Se questo è il tuo primo messaggio, seleziona Crea la tua prima campagna.
- Seleziona Messaggi di notifica Firebase e poi Crea.
In caso contrario, nella scheda Campagne, seleziona Nuova campagna e poi Notifiche.
Inserisci il testo del messaggio. Tutti gli altri campi sono facoltativi.
Seleziona Invia messaggio di prova dal riquadro a destra.
Nel campo etichettato Aggiungi un token di registrazione FCM, inserisci il token di registrazione che hai ottenuto in una sezione precedente di questa guida.
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:
getInitialMessage()
: se l'applicazione viene aperta da uno stato di terminazione, questo metodo restituisce unFuture
contenente unRemoteMessage
. Una volta consumato,RemoteMessage
verrà rimosso.onMessageOpenedApp
: unStream
che pubblica unRemoteMessage
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: