Erste Multicast-Push-Nachricht mit FCM-Themen

1. Einführung

Zielvorhaben

In diesem Codelab erfahren Sie, wie Sie Ihre plattformübergreifende App so instrumentieren, dass Sie Push-Nachrichten mithilfe von FCM-Themen an verschiedene Untergruppen Ihrer App-Instanzen per Multicast übertragen können.

Danach können Sie die FCM-Infrastruktur nutzen, um diese Untergruppen sowie Multicast-Push-Nachrichten über die Untergruppen zu verwalten.

Themenübersicht

Themen sind eine von der FCM-Infrastruktur unterstützte Methode, Untergruppen Ihrer App-Instanzen mit Nachrichten zu erreichen.

FCM stellt die APIs zum Senden von Nachrichten und zum Verwalten von Abos für diese Themen bereit. Das Zuweisen und Trennen einer Anwendungsinstanz zu einem Thema wird als „Abonnieren“ bzw. „Abbestellen“ bezeichnet

Die Topics API sollte für öffentlich verfügbare Inhalte verwendet werden. Zum Beispiel Nachrichten über Wettervorhersagen. Wenn Sie nutzerbezogene Nachrichten senden möchten, verwenden Sie das Firebase Admin SDK, um Nachrichten an mehrere Geräte zu senden.

Das themenbasierte Multicast ist für den Durchsatz optimiert.

Aufgaben in diesem Lab

  • Das Abonnieren und Abbestellen von Themen für Nutzer über eine mobile App
  • Multicast-Push-Nachrichten mithilfe von Themen senden
  • Nachrichten mithilfe von Themenbedingungen an eine Kombination von Themen senden
  • Themen-Abonnements serverseitig verwalten und Bulk-Abonnements und -Kündigungen durchführen.

Umfang

  • Android-Apps, die Themen abonnieren oder abbestellen und Nachrichten empfangen, wenn sie an die Themen gesendet werden
  • Eine serverseitige Integration mit dem Firebase Admin SDK, die zum Senden von Themennachrichten über FCM APIs verwendet wird.

Voraussetzungen

  • Einen Browser Ihrer Wahl, z. B. Chrome
  • IntelliJ IDEA-IDE für die Entwicklung von Java-Anwendungen
    • Achten Sie darauf, bei der Installation die Unterstützung für Gradle zu aktivieren.
  • Android Studio-IDE für die Entwicklung von Android-Apps
  • Ein Gerät, auf dem die Android-App ausgeführt wird. Eine der folgenden Möglichkeiten:
    • Der Android-Emulator (Erforderliche Einrichtung in Android Studio)
    • Ein physisches Android-Gerät, das mit Ihrem Computer verbunden ist und sich im Entwicklermodus befindet
  • Ein Google-Konto zum Erstellen und Verwalten Ihres Firebase-Projekts.

2. Einrichtung

Code abrufen

Klonen Sie das GitHub-Repository über die Befehlszeile:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

Der Beispielcode wird in das Verzeichnis fcm-codelab geklont.

cd fcm-codelab

Die Start-App für dieses Codelab befindet sich im Verzeichnis messaging des Zweigs fcm-topics-codelab. So rufen Sie den Startcode auf: Es enthält die beiden Verzeichnisse StockNewsApp und StockNewsServer. Ersteres enthält die Android-Starter-App und Letzteres den serverseitigen Startcode.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

Die fertige Version dieses Codelabs wird im Verzeichnis messaging/fcm-topics-codelab/completed abgelegt.

Firebase-Projekt erstellen

  1. Klicken Sie in der Firebase Console auf Projekt hinzufügen, nennen Sie das Firebase-Projekt StockNews und klicken Sie auf „Weiter“. Hinweis: Merken Sie sich die Projekt-ID Ihres Firebase-Projekts. Sie können auch auf das Symbol Bearbeiten klicken, um Ihre bevorzugte Projekt-ID festzulegen.

fc08f9a7808e4553.png

  1. Sie können die Aktivierung von Google Analytics überspringen. Für dieses Codelab benötigen Sie ihn nicht. Klicken Sie auf Weiter.
  2. Klicken Sie auf Projekt erstellen.

Glückwunsch! Sie haben gerade Ihr Firebase-Projekt erstellt. Jetzt können Sie auf den Projektnamen klicken, um die Konsole aufzurufen.

3. Plattformspezifische Konfiguration von Firebase-Apps

Die meisten Codeänderungen, die zum Aktivieren der Firebase-Unterstützung erforderlich sind, wurden bereits in das Projekt eingecheckt, an dem Sie gerade arbeiten. Wenn Sie jedoch Unterstützung für mobile Plattformen hinzufügen möchten, müssen Sie Folgendes tun:

  • Gewünschte Plattform im Firebase-Projekt registrieren
  • Laden Sie die platformspezifische Konfigurationsdatei herunter und fügen Sie sie dem Code hinzu.

In diesem Codelab fügen wir eine Android Firebase-App hinzu.

84e0b3199bef6d8a.pngAndroid konfigurieren

  1. Wählen Sie in der Firebase Console im Zahnradsymbol für die Einstellungen oben in der linken Navigationsleiste Projekteinstellungen aus. Klicken Sie dann auf der Seite Allgemein unter Meine Apps auf das Android-Symbol.

Das folgende Dialogfeld sollte angezeigt werden : 8254fc299e82f528.png

  1. Der wichtige Wert, den Sie angeben müssen, ist der Android-Paketname. Legen Sie com.ticker.stocknews fest.
    1. Der hier angegebene Paketname muss mit dem im AndroidManifest.xml Ihres StockNewsApp-Startcodes übereinstimmen. Wenn Sie sie suchen oder ändern möchten, gehen Sie folgendermaßen vor:
      1. Öffnen Sie im Verzeichnis StockNewsApp die Datei app/src/main/AndroidManifest.xml.
      2. Suchen Sie im manifest-Element nach dem Stringwert des Attributs package. Dieser Wert ist der Android-Paketname.
  1. Fügen Sie im Firebase-Dialogfeld den kopierten Paketnamen in das Feld Android-Paketname ein.
  2. Das SHA-1-Signaturzertifikat für die Fehlerbehebung ist für dieses Codelab nicht erforderlich, da diese App nicht veröffentlicht wird. Lassen Sie dieses Feld leer.
  3. Klicken Sie auf Register App (App registrieren).
  4. Folgen Sie in der Firebase Console der Anleitung zum Herunterladen der Konfigurationsdatei google-services.json.
  5. Sie können die restlichen Einrichtungsschritte überspringen, da alles andere bereits im Code der Starter-App konfiguriert ist. Ihre App wird auf der Hauptseite der Firebase Console aufgeführt.
  6. Kopieren Sie die Datei google-services.json, die Sie gerade heruntergeladen haben, in das Verzeichnis messaging/fcm-topics-codelab/starter/StockNewsApp/app.

4. Anwendung erstellen und ausführen

Jetzt können Sie mit der Arbeit an Ihrer App beginnen. Erstellen Sie zuerst die App und führen Sie sie aus.

Start-App importieren

Starten Sie Android Studio und importieren Sie die messaging/fcm-topics-codelab/starter/StockNewsApp aus dem Starter-Code-Verzeichnis.

Nach dem Laden des Projekts wird möglicherweise eine Warnung angezeigt, dass Git nicht alle lokalen Änderungen erfasst. Sie können dann auf Ignorieren oder oben rechts auf das X klicken. (Sie übertragen keine Änderungen zurück in das Git-Repository.)

Wenn Sie sich in der Android-Ansicht befinden, sollte links oben im Projektfenster in etwa die Abbildung unten zu sehen sein. Wenn Sie sich in der Projektansicht befinden, müssen Sie das Projekt maximieren, um dieselben Informationen zu sehen.

b574ea0089ee87c6.png

Es kann einige Sekunden dauern, bis Android Studio das Projekt zum ersten Mal im Hintergrund kompiliert. In der Statusleiste unten in Android Studio wird währenddessen ein rotierendes Ladesymbol angezeigt:

4bc64eb3b99eb0ae.png

Wir empfehlen, den Code abzuwarten, bevor Sie Änderungen am Code vornehmen. Dadurch kann Android Studio alle erforderlichen Komponenten laden.

Falls Sie die Aufforderung „Aktualisieren, damit die Sprachänderungen wirksam werden?“ angezeigt werden, oder etwas Ähnliches, wählen Sie „Ja“ aus.

Einrichtung des Emulators

Hilfe beim Einrichten eines Android-Emulators finden Sie im Artikel App ausführen.

Startcode der Android-App

  • Der Startcode ist eine schlanke Android-App mit minimaler Funktionalität und Benutzeroberfläche.
  • Der Datei app/build.gradle wurde bereits eine Abhängigkeit für das firebase-messaging SDK hinzugefügt.

f04ff8f48d186dff.png

  • Im AndroidManifest.xml wurde bereits ein MESSAGING_EVENT-Callback-Handler hinzugefügt.
    • Der Handler StockNewsMessagingService.java erweitert die FirebaseMessagingService-Klasse, die verschiedene Funktionen für Firebase Cloud Messaging bietet. Weitere Informationen finden Sie in der FirebaseMessagingService-Dokumentation. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • Die Funktion onNewToken wird aufgerufen, wenn das FCM-Registrierungstoken erstellt oder aktualisiert wird. Weitere Informationen finden Sie unter Tokengenerierung überwachen.
    • Die Funktion onMessageReceived wird aufgerufen, wenn eine Nachricht empfangen wird und die App im Vordergrund ausgeführt wird. Derzeit wird die empfangene Nachricht einfach protokolliert.
  • Außerdem gibt es in AndroidManifest.xml eine Android-Application-Klasse namens StockNewsApplication. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • Diese Klasse wird als erste instanziiert, wenn die App gestartet wird.
    • In der Funktion onCreate der Klasse StockNewsApplication wird ein Aufruf zum Erstellen eines FCM-Registrierungstokens hinzugefügt. Damit wird ein gültiges FCM-Registrierungstoken generiert und protokolliert.
  • Die MainActivity.java fügt die RecyclerView hinzu, die die Auswahl für die Aktienkategorie anzeigt.
  • SubscriptionAdapter.java implementiert RecyclerView.Adapter, wodurch der Auswahlbildschirm für die Aktienkategorie gezeichnet wird.
    • Jede Aktienkategorie hat einen Namen und daneben ist eine Ein/Aus-Schaltfläche für das Abo zu sehen.
    • Wenn Sie die Ein/Aus-Schaltfläche ändern, sollte ein FCM-Abo-/Abboaufhebungsaufruf für das Thema erfolgen.
    • Diese Aufrufe werden Sie in den nächsten Abschnitten implementieren.
  • Die Klasse model/StockCategories.java enthält eine Liste aller Aktienkategorien und der zugehörigen Themennamen.

b32663ec4e865a18.png

Start-App ausführen

  1. Verbinde dein Android-Gerät mit deinem Computer oder starte einen Emulator.
  2. Wählen Sie in der oberen Symbolleiste Ihr Android-Zielgerät oder Emulator aus und klicken Sie auf die Schaltfläche „Ausführen“.

5b27fc5b237e06b9.png

  1. Die Benutzeroberfläche der App sieht so aus:

ff5b1a1c53231c54.png

  1. Die App erstellt ein FCM-Registrierungstoken und protokolliert es. An der App-Benutzeroberfläche ändert sich jedoch nichts.
    1. Kopieren und speichern Sie das FCM-Registrierungstoken, da es in den nächsten Schritten verwendet wird.

927eb66bc909f36b.png

5. Testnachricht senden

Jetzt können Sie eine Testnachricht an die App-Instanz senden, die Sie im letzten Schritt eingerichtet haben.

Starter-Servercode importieren

Starten Sie IntelliJ IDEA und öffnen Sie das messaging/fcm-topics-codelab/starter/StockNewsServer-Projekt.

Die Projektansicht in der linken Navigationsleiste sollte in etwa so aussehen:

da20711f6527dff6.png

Beachten Sie, dass es einige Minuten dauern kann, bis IntellIj IDEA Ihr Projekt erstellt und die erforderlichen Abhängigkeiten abgerufen hat.

Server-Startcode

  • Der Startcode des Servers ist ein Gradle-basiertes Java-Projekt.
  • Der Datei build.gradle wurde bereits die Abhängigkeit vom firebase-admin SDK hinzugefügt. Dieses SDK bietet Zugriff auf verschiedene Funktionen zum Senden von FCM-Nachrichten.

650fc733298588f8.png

  • Schließlich gibt es zwei Klassen:
    • FcmSender.java: Diese Klasse enthält die folgenden Methoden:
      • initFirebaseSDK: Initialisiert das firebase-admin SDK.
      • sendMessageToFcmRegistrationToken: Nachricht an ein FCM-Registrierungstoken senden
      • sendMessageToFcmTopic: Sendet eine Nachricht an ein FCM-Thema.
      • sendMessageToFcmTopicCondition: Sendet eine Nachricht an eine FCM-Themenbedingung.
    • FcmSubscriptionManager.java: Diese Klasse enthält Methoden, mit denen sich Themenabos serverseitig verwalten lassen.
      • initFirebaseSDK: Initialisiert das firebase-admin SDK.
      • subscribeFcmRegistrationTokensToTopic: FCM-Registrierungstoken für ein FCM-Thema abonnieren.
      • unsubscribeFcmRegistrationTokensFromTopic: FCM-Registrierungstoken von einem FCM-Thema abmelden.

Servercode einrichten

  1. Zuerst müssen wir ein Firebase-Dienstkonto einrichten, mit dem das firebase-admin SDK Aufrufe von FCM APIs autorisieren kann.
    1. Rufen Sie die Firebase Console auf, klicken Sie in der linken Navigationsleiste neben Projektübersicht auf das Zahnradsymbol und wählen Sie Projekteinstellungen aus. 8c2108d4d7c915e9.png
    2. Wählen Sie auf der Seite „Einstellungen“ die Option Dienstkonten aus und klicken Sie auf Dienstkonto erstellen. 84b128cc5dac0a85.png
    3. Klicken Sie jetzt auf die Schaltfläche Neuen privaten Schlüssel generieren. Daraufhin wird die Schlüsseldatei automatisch heruntergeladen.
    4. Benennen Sie die Schlüsseldatei in service-account.json um und kopieren Sie sie in den Ordner messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources.
    5. Sowohl FcmSender.java als auch FcmSubscriptionManager.java laden die Datei service-account.json mit dem folgenden Code aus dem Klassenpfad. 8dffbee658e0bdd.png
  2. Jetzt steht der Servercode bereit. Build ausführen -> Build Project (Projekt erstellen) aus.

Testnachricht senden

  1. Suchen Sie in FcmSender.java nach der Funktion sendMessageToFcmRegistrationToken und fügen Sie das FCM-Registrierungstoken, das Sie im Abschnitt Starter App ausführen kopiert haben, in das Feld registrationToken ein.
  2. Entfernen Sie in der Funktion main die Kommentarzeichen für die Funktion sendMessageToFcmRegistrationToken und klicken Sie auf „Ausführen“, um den Code auszuführen.
    1. Sehen Sie sich an, wie das FCM-Registrierungstoken im Feld Token des message-Objekts festgelegt ist.
    2. Außerdem haben wir die send API der FirebaseMessaging-Oberfläche verwendet.

52e4a3ec3f816473.png

  1. Dadurch sollte eine Nachricht an die App-Instanz gesendet werden, die Sie im vorherigen Schritt eingerichtet haben.
  2. Wenn sich die App-Instanz im Vordergrund befindet, sollte der Nachrichteninhalt protokolliert werden.

d3540ec1089f97dd.png

  1. Wenn sich die App-Instanz im Hintergrund befindet, wird die Nachricht in der Benachrichtigungsleiste angezeigt.

31203deca59c03fe.png

Super, Sie haben das Firebase Admin SDK verwendet, um Nachrichten an eine App-Instanz zu senden. Weitere Informationen zur Verwendung des Firebase Admin SDK auf Ihrem Server

6. Themenabos implementieren

In diesem Schritt implementieren Sie Aktionen für das Abonnieren und Kündigen von Themen über die Ein/Aus-Schaltfläche für die Aktienkategorie der Android-App.

Wenn ein App-Nutzer den Schalter für eine bestimmte Aktienkategorie umschaltet, wird ein Aufruf zum Abonnieren oder Kündigen eines Themas ausgelöst.

Code überprüfen

  • Rufen Sie im Code der Android-App die Klasse SubscriptionAdapter.java auf und suchen Sie die Klasse RecyclerViewViewHolder.

6c0614199e684f6.png

  • Der Klassenkonstruktor richtet mithilfe von setOnCheckedChangeListener einen Listener für die Abo-Ein/Aus-Schaltfläche ein.
  • Je nach Schalter werden Aktionen zum Abonnieren und zum Abbestellen durch Aufrufen der Methoden subscribeToStockCategory bzw. unsubscribeFromStockCategory ausgeführt.
  • Die Methode setData wird vom onBindViewHolder des RecyclerView-Adapters aufgerufen, um den ViewHolder mit der entsprechenden Stock-Kategorie zu verknüpfen.

Themenabo implementieren

  1. In der Methode subscribeToStockCategory implementieren Sie den Aufruf der subscribeToTopic API des FirebaseMessaging-Objekts. Der Code könnte in etwa so aussehen:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Abmeldung von Themen implementieren

  1. In ähnlicher Weise implementieren Sie in der else-Bedingung den Aufruf der unsubscribeFromTopic API. Etwas in etwa:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Jetzt ausprobieren

  1. Führen Sie die App aus und wechseln Sie die Optionen für die Aktienkategorie, um die Aktionen „Abonnieren“ und „Abbonnieren aufheben“ auszuführen. Dies würde in etwa so aussehen:

Abonnieren

Abbestellen

7. Deine erste Themennachricht wird gesendet

In diesem Schritt implementieren Sie serverseitigen Code, um eine FCM-Themennachricht zu senden.

Serverseitige Integration für das Senden von Themennachrichten implementieren

  1. Wechseln Sie im Servercode zu FcmSender.java und suchen Sie die Methode sendMessageToFcmTopic.

56381dd1b40cde9c.png

  1. Gib in der ersten Zeile das FCM-Thema an, an das du die Nachricht senden möchtest.
    • Es ist ein String im Format /topics/<Topic Name>. Beispiel: /topics/Technology.
  2. Erstellen Sie in den nächsten Zeilen ein neues message-Objekt, das dem in der sendMessageToFcmRegistrationToken-Funktion definierten ähnelt.
    • Statt das Feld Token des message-Objekts festzulegen, legen Sie stattdessen das Feld Topic fest.
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. Fügen Sie nun den Aufruf zur Instanz FirebaseMessaging hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der Funktion sendMessageToFcmRegistrationToken).
FirebaseMessaging.getInstance().send(message);
  1. Aktualisieren Sie abschließend die main-Funktion und aktivieren Sie nur den Aufruf der sendMessageToFcmTopic-Funktion.

9a6aa08dd7c28898.png

Nachricht senden und Empfang bestätigen

  1. Bevor Sie die Themennachricht senden, müssen Sie dafür sorgen, dass Ihre App-Instanz für das Thema abonniert ist, an das Sie senden möchten.
    1. Dazu musst du die entsprechende Ein/Aus-Schaltfläche umdrehen. Beispiel:
    4668247408377712.png
  2. Sie können jetzt Ihre Themennachricht senden, indem Sie die Funktion main von FcmSender.java ausführen.
  3. Wie zuvor sollten Sie den Empfang der Nachricht in der App-Instanz sehen können.
    1. App-Instanz im Vordergrund
    c144721399f610fe.png
    1. App-Instanz im Hintergrund
    44efc7dfd57e8e9a.png
  4. Bonus: Kündige das Thema, an das du gesendet hast, aus dem Abo und sende die Nachricht noch einmal. Sie stellen fest, dass die Nachricht nicht an die Anwendungsinstanz zugestellt wird.

8. Erste Themenbedingungsnachricht senden

Mit der Funktion „Themenbedingung“ können Sie Nachrichten an eine Kombination von Themen senden und so eine ausdrucksstärkere Zielgruppendefinition angeben.

In unserer StockNews App könnten Sie beispielsweise Nachrichten an eine Gruppe von App-Instanzen senden, die entweder Technologie- oder Automobilthemen abonniert haben. Ein solcher Fall kann beispielsweise bei einem bemerkenswerten Ereignis im Zusammenhang mit Waymo auftreten.

Mithilfe von Themen können Sie Ihre Kombination mithilfe der folgenden Operatoren in Form eines booleschen Ausdrucks ausdrücken

  • && : Logisches UND. Beispiel: 'Technology' in topics && 'Automotive' in topics: Es wird nur auf App-Instanzen ausgerichtet, die sowohl Technologie- als auch Automobilthemen abonniert haben.
  • ||: Logisches OR. Beispiel: 'Technology' in topics || 'Automotive' in topics – Ausrichtung auf App-Instanzen, die entweder Themen aus der Kategorie „Technologie“ oder „Automobil“ abonniert haben.
  • () = Klammern zum Gruppieren. Beispiel: 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics): Das Targeting erfolgt nur auf App-Instanzen, die die Themen Technologie, Automobil oder Energie abonniert haben.

Weitere Informationen zum Erstellen von Sendeanfragen zur Verwendung dieser Funktion

Serverseitige Integration zum Senden einer Themenbedingungsnachricht implementieren

  1. Gehen Sie zurück zum Servercode und suchen Sie die Methode mit dem Namen sendMessageToFcmTopicCondition.

3719a86c274522cf.png

  1. Geben Sie in der ersten Zeile für die Variable topicCondition die Themenbedingung an, an die die Nachricht gesendet werden soll. Sie können sie auf 'Technology' in topics && 'Automotive' in topics festlegen.
  2. Erstellen Sie in den nächsten Zeilen ein neues message-Objekt, das dem in der sendMessageToFcmTopic-Funktion definierten Objekt ähnelt.
    1. Der Unterschied besteht darin, dass Sie anstelle des Felds Topic des Objekts das Feld Condition festlegen.
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. Fügen Sie nun den Aufruf zur Instanz FirebaseMessaging hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der Funktion sendMessageToFcmTopic).
FirebaseMessaging.getInstance().send(message);
  1. Aktualisieren Sie abschließend die main-Funktion und aktivieren Sie nur den Aufruf der sendMessageToFcmTopicCondition-Funktion.

db9588d40d2a0da6.png

Nachricht senden und Empfang prüfen

  1. Prüfen Sie vor dem Senden der Themennachricht zuerst, ob Ihre App-Instanz die angegebene Themenbedingung erfüllt. Abonnieren Sie dazu die App-Instanz sowohl für Technologie- als auch Automobilthemen.
  2. Sie können jetzt Ihre Themennachricht senden, indem Sie die Funktion main von FcmSender.java ausführen.
  3. Wie zuvor sollten Sie den Empfang der Nachricht auf der App-Instanz beobachten können.
    1. Anwendungsinstanz im Vordergrund
    6f612ace15aa6515.png
    1. Anwendungsinstanz im Hintergrund
    78044a56ac2359cb.png
  4. Bonus: Sie können sich jetzt vom Thema „Technologie“ abmelden und die Nachricht zur Themenbedingung noch einmal senden. Die Nachricht wird nicht von der App-Instanz empfangen.

9. Zusammenfassung

Lassen Sie uns kurz wiederholen, was Sie bisher gelernt haben.

  • Hier erfahren Sie, wie Sie ein Themenabo in einer App-Instanz initiieren bzw. das Abo kündigen.
  • Eine Nachricht an das Thema senden und den Empfang in abonnierten App-Instanzen bestätigen.
  • Eine Nachricht an eine Bedingung des Themas senden und den Empfang auf einer App-Instanz prüfen, die die Bedingung erfüllt.

Im nächsten Abschnitt erfahren Sie, wie Sie Anwendungsinstanzen für Themen abonnieren oder abmelden können, ohne clientseitige Aufrufe instanziieren zu müssen.

c0dc20655d392690.gif

10. Themenabos auf Serverseite verwalten

Bisher wurden in diesem Codelab alle Aufrufe zum Abonnieren und Abbestellen von Themen von einer App-Instanz initiiert.

In einigen Anwendungsfällen kann es jedoch sinnvoll sein, die Themenabos serverseitig zu verwalten. Sie können beispielsweise einer Untergruppe Ihrer vorhandenen Nutzer ein neues Thema abonnieren, ohne auf die Einführung einer App warten zu müssen.

In diesem Abschnitt erfahren Sie, wie Sie das Firebase Admin SDK verwenden, um einen Batch von FCM-Registrierungstokens für ein Thema zu abonnieren und wieder abzumelden, indem Sie serverseitige Aufrufe ausführen.

Serverseitiges Abo von FCM-Registrierungstokens für das FCM-Thema implementieren

  1. Springen Sie im Servercode zum FcmSubscriptionManager.java-Kurs. Suchen Sie die Methode mit dem Namen subscribeFcmRegistrationTokensToTopic. Den Aufruf der subscribeToTopic API implementieren Sie hier.

5d5709e7b3cbcb04.png

  1. Abonnieren wir das Thema „Energie“ für die App-Instanz. Geben Sie dazu zunächst Daten für die folgenden beiden Felder an:
    1. registrationTokens: eine durch Kommas getrennte Liste von Strings, die die FCM-Registrierungstokens darstellen, für die Sie Themenabos erstellen möchten.
    2. topicName: der Name des Themas für das Energiethema, z.B. /topics/Energy.
  2. Implementieren Sie den Aufruf in den nächsten Zeilen wie folgt:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Sie können TopicManagementResponse auf allgemeine Ergebnisstatistiken prüfen. Es wird z. B. mit getSuccessCount die Anzahl der erfolgreich erstellten Themenabos ausgegeben.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Schließlich ermöglichen Sie in der Funktion main nur Aufrufe der Funktion subscribeFcmRegistrationTokensToTopic.

Abo erstellen und Themennachricht senden

  1. Jetzt können Sie das Themenabo erstellen und eine Nachricht an dieses senden.
  2. Führen Sie die Funktion main der Klasse FcmSubscriptionManager.java aus. Dadurch wird ein Themenabo erstellt.
  3. Richten Sie nun den Code zum Senden der Nachricht ein. Ähnlich wie zuvor
    1. Suchen Sie in der FcmSender.java die Funktion sendMessageToFcmTopic.
    2. Legen Sie für topicName das Thema „Energie“ fest, z.B. /topics/Energy.
    3. Erstellen Sie ein Message-Objekt und richten Sie es mit setTopic auf das Thema aus.
    4. Aktualisieren Sie abschließend die Methode main, um nur die Funktion sendMessageToFcmTopic zu aktivieren.
  4. Führen Sie die main-Funktion von FcmSender.java aus. Dadurch wird die Nachricht an Ihre App-Instanz gesendet und Sie können sie in Ihrer App so beobachten:
    1. Anwendungsinstanz im Vordergrund
    40ab6cf71e0e4116.png
    1. Anwendungsinstanz im Hintergrund
    8fba81037198209e.png

Serverseitige Abmeldung von FCM-Registrierungstokens für FCM-Thema implementieren

  1. Für serverseitiges Abbestellen von Themen kannst du diese unsubscribeFromTopic API verwenden. Fügen Sie den entsprechenden Code zur Funktion unsubscribeFcmRegistrationTokensFromTopic der Klasse FcmSubscriptionManager.java hinzu.

8d9e8ea9d34016bd.png

  1. Die Implementierung des serverseitigen Abbestellungscodes und die Validierung seiner Wirkung durch Senden einer Themennachricht überlassen wir Ihnen als Übung.

11. Glückwunsch

Glückwunsch, Sie haben erfolgreich Multicast-Nachrichten mithilfe von FCM-Themen an Untergruppen Ihrer App-Instanzen gesendet. Dies erleichtert es Ihnen, Nutzer zeitnah mit relevanten Inhalten zu erreichen.

947def3eb33b1e4a.gif

Nächste Schritte

Nachdem Sie Ihr Codelab abgeschlossen haben, können Sie anhand der folgenden Leitfäden Themen für andere Plattformen ausprobieren:

Referenzdokumente