Testnachricht an eine App im Hintergrund senden

Um mit FCM zu beginnen, erstellen Sie den einfachsten Anwendungsfall: Senden einer Testbenachrichtigung vom Benachrichtigungs-Composer an ein Entwicklungsgerät, während die App auf dem Gerät im Hintergrund ausgeführt wird. Auf dieser Seite sind alle Schritte aufgeführt, die Sie dafür benötigen – von der Einrichtung bis zur Überprüfung. Sie können Schritte umfassen, die Sie bereits ausgeführt haben, wenn Sie eine Flutter-Anwendung für FCM eingerichtet haben.

FCM-Plug-in installieren

  1. Installieren und initialisieren Sie die Firebase SDKs für Flutter, falls noch nicht geschehen.

  2. Führen Sie im Stammverzeichnis Ihres Flutter-Projekts den folgenden Befehl aus, um das Plug-in zu installieren:

    flutter pub add firebase_messaging
    
  3. Erstellen Sie anschließend Ihre Flutter-Anwendung neu:

    flutter run
    

Auf Registrierungstoken zugreifen

Wenn du eine Nachricht an ein bestimmtes Gerät senden möchtest, musst du das Registrierungstoken dieses Geräts kennen. Da Sie das Token in einem Feld in der Benachrichtigungskonsole eingeben müssen, um diese Anleitung abzuschließen, sollten Sie das Token kopieren oder sicher speichern, nachdem Sie es abgerufen haben.

Rufen Sie getToken() auf, um das aktuelle Registrierungstoken für eine App-Instanz abzurufen. Wenn die Berechtigung zum Senden von Benachrichtigungen nicht gewährt wurde, fordert diese Methode den Nutzer nach Berechtigungen zum Senden von Benachrichtigungen an. Andernfalls wird ein Token zurückgegeben oder die Zukunft wird aufgrund eines Fehlers abgelehnt.

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

Testbenachrichtigung senden

  1. Installieren und ausführen Sie die App auf dem Zielgerät. Auf Apple-Geräten müssen Sie die Berechtigungsanfrage für Remote-Benachrichtigungen akzeptieren.

  2. Achte darauf, dass die App auf dem Gerät im Hintergrund ausgeführt wird.

  3. Öffnen Sie in der Firebase-Konsole die Seite Messaging.

  4. Wenn dies Ihre erste Mitteilung ist, wählen Sie Erste Kampagne erstellen aus.

    1. Wählen Sie Firebase-Benachrichtigungsnachrichten und dann Erstellen aus.
  5. Wählen Sie andernfalls auf dem Tab Kampagnen die Option Neue Kampagne und dann Benachrichtigungen aus.

  6. Geben Sie den Nachrichtentext ein. Alle anderen sind optional.

  7. Wählen Sie im rechten Bereich Testnachricht senden aus.

  8. Geben Sie im Feld FCM-Registrierungstoken hinzufügen das Registrierungstoken ein, das Sie in einem vorherigen Abschnitt dieser Anleitung erhalten haben.

  9. Wählen Sie Testen aus.

Nachdem Sie Testen ausgewählt haben, sollte das Zielclientgerät (mit der App im Hintergrund) die Benachrichtigung erhalten.

Informationen zur Nachrichtenübermittlung an Ihre App finden Sie im FCM-Dashboard für Berichte. Dort werden die Anzahl der auf Apple- und Android-Geräten gesendeten und geöffneten Nachrichten sowie Daten zu „Impressionen“ (von Nutzern gesehene Benachrichtigungen) für Android-Apps erfasst.

Interaktionen verarbeiten

Wenn Nutzer auf eine Benachrichtigung tippen, wird sowohl auf Android- als auch auf iOS-Geräten standardmäßig die App geöffnet. Wenn die Anwendung beendet wurde, wird sie gestartet. Wenn sie sich im Hintergrund befindet, wird sie in den Vordergrund gebracht.

Je nach Inhalt einer Benachrichtigung können Sie die Interaktion des Nutzers beim Öffnen der Anwendung steuern. Wenn beispielsweise eine neue Chatnachricht über eine Benachrichtigung gesendet wird und der Nutzer sie auswählt, können Sie die entsprechende Unterhaltung öffnen, wenn die Anwendung geöffnet wird.

Das firebase-messaging-Paket bietet zwei Möglichkeiten, diese Interaktion zu verarbeiten:

  1. getInitialMessage(): Wenn die Anwendung aus einem beendeten Zustand geöffnet wird, gibt diese Methode einen Future mit einer RemoteMessage zurück. Nach dem Verbrauch wird die RemoteMessage entfernt.
  2. onMessageOpenedApp: Ein Stream, das ein RemoteMessage postet, wenn die Anwendung aus einem Hintergrundstatus geöffnet wird.

Um eine reibungslose Nutzung zu gewährleisten, sollten Sie beide Szenarien berücksichtigen. Im folgenden Codebeispiel wird gezeigt, wie das geht:

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("...");
  }
}

Wie Sie mit Interaktionen umgehen, hängt von der Konfiguration Ihrer Anwendung ab. Das Beispiel oben zeigt eine einfache Verwendung von StatefulWidget.

Nächste Schritte

Nachrichten an Apps im Vordergrund senden

Nachdem Sie Benachrichtigungen gesendet haben, während Ihre App im Hintergrund ausgeführt wurde, lesen Sie den Hilfeartikel Nachrichten in einer Flutter-App empfangen, um zu erfahren, wie Sie Nachrichten an Apps im Vordergrund senden.

Mehr als nur Benachrichtigungen

Wenn Sie Ihrer App weitere, erweiterte Funktionen hinzufügen möchten, benötigen Sie eine Serverimplementierung.

Gehen Sie dann in Ihrem App-Client so vor: