Erste Multicast-Push-Nachricht mit FCM-Themen

1. Einführung

Zielvorhaben

In diesem Codelab erfahren Sie, wie Sie Ihre mehrplattformfähige App so instrumentieren, dass Sie Push-Nachrichten mithilfe von FCM-Themen an verschiedene Untergruppen Ihrer App-Instanzen per Multicast senden 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 Möglichkeit, 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 Verknüpfen und Entfernen einer App-Instanz mit einem Thema wird als „Abonnieren“ bzw. „Abbestellen“ bezeichnet.

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

Themenbasiertes Multicasting ist für den Durchsatz optimiert.

Aufgaben in diesem Lab

  • So können Nutzer in einer mobilen App Themen abonnieren und sich wieder abmelden.
  • Multicast-Push-Nachrichten mithilfe von Themen senden
  • So senden Sie Nachrichten mithilfe von Themenbedingungen an eine Kombination von Themen.
  • Informationen zum Verwalten von Themenabos auf der Serverseite und zum Abonnieren und Abbestellen von Themen in Bulk

Umfang

  • Eine Android-App, die Themen abonniert oder deren Abo kündigt und Nachrichten empfängt, die 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 zur Entwicklung von Java-Anwendungen.
    • Aktivieren Sie während der Installation die Unterstützung für Gradle.
  • Android Studio IDE für die Entwicklung von Android-Anwendungen.
  • Ein Gerät zum Ausführen der Android-Anwendung. Eine der folgenden Möglichkeiten:
    • Der Android-Emulator. (Erforderliche Einrichtung in Android Studio)
    • Ein physisches Android-Gerät, das mit Ihrem Computer verbunden und auf den Entwicklermodus gesetzt ist.
  • 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. Erstere enthält die Android-Starter-App und letztere den serverseitigen Code für den Auslöser.

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, geben Sie als Namen für das Firebase-Projekt StockNews ein und klicken Sie auf „Weiter“. Hinweis: Notieren Sie sich die Projekt-ID Ihres Firebase-Projekts. Sie können auch auf das Symbol Bearbeiten klicken, um die gewünschte Projekt-ID festzulegen.

fc08f9a7808e4553.png

  1. Sie können das Aktivieren von Google Analytics überspringen. Für dieses Codelab ist das nicht erforderlich. Klicken Sie auf Weiter.
  2. Klicken Sie auf Projekt erstellen.

Glückwunsch! Sie haben gerade Ihr Firebase-Projekt erstellt. Klicken Sie jetzt auf den Projektnamen, um die Console aufzurufen.

3. Plattformspezifische Firebase App-Konfiguration

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 plattformspezifische Konfigurationsdatei herunter und fügen Sie sie dem Code hinzu.

Für dieses Codelab fügen wir eine Android-Firebase-App hinzu.

84e0b3199bef6d8a.pngAndroid konfigurieren

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

Das folgende Dialogfeld wird angezeigt : 8254fc299e82f528.png

  1. Der wichtigste Wert ist der Android-Paketname. Legen Sie com.ticker.stocknews fest.
    1. Der hier angegebene Paketname muss mit dem in der AndroidManifest.xml Ihres Startcodes für StockNewsApp angegebenen Paketnamen übereinstimmen. Wenn Sie es suchen oder ändern möchten, gehen Sie so 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. Für dieses Codelab benötigen Sie kein Debug-Signaturzertifikat SHA-1, da diese App nicht veröffentlicht wird. Lassen Sie dieses Feld leer.
  3. Klicken Sie auf App registrieren.
  4. Folgen Sie in der Firebase Console der Anleitung, um die Konfigurationsdatei google-services.json herunterzuladen.
  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

Sie können jetzt 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 auf Ignorieren oder oben rechts auf das X klicken. Sie werden keine Änderungen zurück in das Git-Repository übertragen.

Wenn Sie sich in der Ansicht Android befinden, sollte links oben im Projektfenster ungefähr das Bild 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, zu warten, bis dieser Vorgang abgeschlossen ist, bevor Sie Codeänderungen vornehmen. Dadurch kann Android Studio alle erforderlichen Komponenten abrufen.

Wenn Sie außerdem eine Aufforderung wie „Neu laden, damit die Sprachänderungen wirksam werden?“ sehen, wählen Sie „Ja“ aus.

Emulator einrichten

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 ist bereits eine Abhängigkeit vom firebase-messaging SDK hinzugefügt.

f04ff8f48d186dff.png

  • In der AndroidManifest.xml ist bereits ein MESSAGING_EVENT-Callback-Handler hinzugefügt.
    • Dieser Handler, StockNewsMessagingService.java, erweitert die Klasse FirebaseMessagingService, die verschiedene Firebase Cloud Messaging-Funktionen 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 wird in AndroidManifest.xml eine Android-Application-Klasse namens StockNewsApplication bereitgestellt. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • Diese Klasse wird beim Starten der App als Erstes instanziiert.
    • In der Funktion onCreate der Klasse StockNewsApplication wird ein Aufruf zum Erstellen eines FCM-Registrierungstokens hinzugefügt. Es wird ein gültiges FCM-Registrierungstoken generiert und protokolliert.
  • Durch das MainActivity.java wird das RecyclerView hinzugefügt, über das die Optionen für die Lagerkategorie angezeigt werden.
  • SubscriptionAdapter.java implementiert RecyclerView.Adapter, das den Auswahlbildschirm für die Lagerkategorie anzeigt.
    • Jede Aktienkategorie hat einen Namen und daneben eine Ein-/Aus-Schaltfläche für die Benachrichtigungen.
    • Wenn Sie die Ein/Aus-Schaltfläche ändern, sollte ein FCM-Abo-/Abboaufhebungsaufruf für das Thema erfolgen.
    • Diese Aufrufe werden in den folgenden Abschnitten implementiert.
  • Die model/StockCategories.java-Klasse enthält eine Liste aller Stock-Kategorien und der zugehörigen Themennamen.

b32663ec4e865a18.png

Start-App ausführen

  1. Verbinden Sie Ihr Android-Gerät mit dem Computer oder starten Sie einen Emulator.
  2. Wählen Sie oben in der Symbolleiste Ihr Ziel-Android-Gerät oder -Emulator aus und drücken Sie die Schaltfläche „Ausführen“.

5b27fc5b237e06b9.png

  1. Die App-Benutzeroberfläche 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 Projekt messaging/fcm-topics-codelab/starter/StockNewsServer.

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

da20711f6527dff6.png

Hinweis: Es kann einige Minuten dauern, bis IntellIj IDEA Ihr Projekt erstellt, einschließlich des Abrufens der erforderlichen Abhängigkeiten.

Server-Startcode

  • Der Startcode für den Server ist ein Gradle-basiertes Java-Projekt.
  • In der Datei build.gradle ist 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 wichtigen Methoden:
      • initFirebaseSDK: Initialisiert das Firebase Admin SDK.
      • sendMessageToFcmRegistrationToken: eine Nachricht an ein FCM-Registrierungstoken senden.
      • sendMessageToFcmTopic: eine Nachricht an ein FCM-Thema senden.
      • sendMessageToFcmTopicCondition: eine Nachricht an eine FCM-Themenbedingung senden.
    • 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 beginnt der automatische Download Ihrer Schlüsseldatei.
    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. Der Servercode ist jetzt fertig. Wählen Sie in der oberen Menüleiste „Build ausführen“ -> „Projekt erstellen“ aus.

Testnachricht senden

  1. Suchen Sie in FcmSender.java nach der Funktion sendMessageToFcmRegistrationToken und fügen Sie das FCM-Registrierungstoken ein, das Sie aus dem Abschnitt Start-App ausführen kopiert haben, in das Feld registrationToken.
  2. Entfernen Sie in der Funktion main nur den Kommentar bei der Funktion sendMessageToFcmRegistrationToken und klicken Sie auf „Ausführen“, um den Code auszuführen.
    1. Das FCM-Registrierungstoken wird im Feld Token des message-Objekts festgelegt.
    2. Beachten Sie außerdem, dass wir die send API der FirebaseMessaging-Benutzeroberfläche verwendet haben.

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 implementierst du die Aktionen zum Abonnieren und Abbestellen von Themen über die Ein-/Aus-Schaltfläche für die Aktienkategorie in der Android-App.

Wenn ein App-Nutzer den Schalter für eine bestimmte Aktienkategorie umlegt, wird ein Aufruf zum Abonnieren oder Abbestellen des Themas gesendet.

Code prüfen

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

6c0614199e684f6.png

  • Der Klassenkonstruktor richtet mit setOnCheckedChangeListener einen Listener für die Aktivierung/Deaktivierung des Abos ein.
  • Je nach Schalter werden die Aktionen „Abonnieren“ und „Abo kündigen“ durch Aufrufen der Methoden subscribeToStockCategory bzw. unsubscribeFromStockCategory ausgeführt.
  • Die Methode setData wird von onBindViewHolder des RecyclerView-Adapters aufgerufen, um den ViewHolder an die entsprechende Stock-Kategorie zu binden.

Themenabos 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 der else-Bedingung implementieren Sie den Aufruf der unsubscribeFromTopic API. Etwa so:
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();
          });
    }

Probieren wir es aus

  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. Erste Topic Message senden

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

Serverseitige Integration für das Senden von Themennachrichten implementieren

  1. Rufen Sie im Servercode FcmSender.java auf und suchen Sie nach der Methode mit dem Namen sendMessageToFcmTopic.

56381dd1b40cde9c.png

  1. Geben Sie in der ersten Zeile das FCM-Thema an, an das Sie die Nachricht senden möchten.
    • Es ist ein String vom 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.
    • Der Unterschied besteht darin, dass Sie anstelle des Felds Token des message-Objekts das Feld Topic festlegen.
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 jetzt den Aufruf der FirebaseMessaging-Instanz hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der sendMessageToFcmRegistrationToken-Funktion).
FirebaseMessaging.getInstance().send(message);
  1. Aktualisieren Sie abschließend die Funktion main und aktivieren Sie den Aufruf nur für die Funktion sendMessageToFcmTopic.

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. Das geht mit einem Klick auf den entsprechenden Schalter. Beispiel:
    4668247408377712.png
  2. Sie können die Themennachricht jetzt senden, indem Sie die main-Funktion 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: Melden Sie sich vom Thema ab, an das Sie die Nachricht gesendet haben, und senden Sie sie noch einmal. Sie stellen fest, dass die Nachricht nicht an die App-Instanz zugestellt wird.

8. Erste Nachricht mit einer Themenbedingung senden

Mit der Themenbedingung können Sie Nachrichten an eine Kombination von Themen senden und so eine aussagekräftigere Zielgruppendefinition vornehmen.

In unserer StockNews App könnten Sie beispielsweise Nachrichten an eine Gruppe von App-Instanzen senden, die entweder Technologie- oder Automobilthemen abonniert haben. Das kann beispielsweise der Fall sein, wenn es ein bemerkenswertes Ereignis im Zusammenhang mit Waymo gibt.

Mit Topics können Sie Ihre Kombination in Form eines booleschen Ausdrucks mit den folgenden Operatoren ausdrücken:

  • && : Logisches AND. Beispiel: 'Technology' in topics && 'Automotive' in topics – Ausrichtung nur auf App-Instanzen, die sowohl für Technologie als auch für die Automobilbranche abonniert sind.
  • || : 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) – Nur auf App-Instanzen ausgerichtet, die die Themen „Technologie“ und entweder „Automobil“ oder „Energie“ abonniert haben.

Weitere Informationen zum Erstellen von Sendeanfragen

Serverseitige Integration zum Senden von Nachrichten zu Themenbedingungen implementieren

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

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 ä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 jetzt den Aufruf der FirebaseMessaging-Instanz hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der sendMessageToFcmTopic-Funktion).
FirebaseMessaging.getInstance().send(message);
  1. Aktualisieren Sie abschließend die Funktion main und aktivieren Sie den Aufruf nur für die Funktion sendMessageToFcmTopicCondition.

db9588d40d2a0da6.png

Nachricht senden und Empfang bestätigen

  1. Bevor Sie die Themennachricht senden, müssen Sie dafür sorgen, dass Ihre App-Instanz die angegebene Themenbedingung erfüllt. Abonnieren Sie dazu die App-Instanz sowohl für das Thema „Technologie“ als auch für das Thema „Automobil“.
  2. Sie können die Themennachricht jetzt senden, indem Sie die main-Funktion 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
    6f612ace15aa6515.png
    1. App-Instanz 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 noch einmal zusammenfassen, was Sie bis jetzt gelernt haben.

  • So kannst du ein Thema abonnieren oder das Abo einer App-Instanz kündigen.
  • Eine Nachricht an das Thema senden und den Empfang in abonnierten App-Instanzen bestätigen.
  • Es wird eine Nachricht an ein Thema gesendet und der Empfang in einer App-Instanz bestätigt, die die Bedingung erfüllt.

Im nächsten Abschnitt erfahren Sie, wie Sie App-Instanzen Themen zuordnen und von Themen abmelden können, ohne Aufrufe von der Clientseite aus zu instanziieren.

c0dc20655d392690.gif

10. Themenabos serverseitig verwalten

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

In einigen Fällen möchten Sie die Themenabos jedoch lieber auf Serverseite verwalten. So können Sie beispielsweise einer Teilgruppe Ihrer bestehenden Nutzer ein neues Thema zuweisen, ohne auf ein App-Roll-out zu warten.

In diesem Abschnitt erfahren Sie, wie Sie mit dem Firebase Admin SDK einen Batch von FCM-Registrierungstokens für ein Thema abonnieren und wieder kündigen, indem Sie serverseitige Aufrufe ausführen.

Serverseitiges Abonnieren von FCM-Registrierungstokens für FCM-Themen implementieren

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

5d5709e7b3cbcb04.png

  1. Abonnieren wir das Thema „Energie“ für die App-Instanz. Geben Sie dazu zuerst 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 Themenname für das Thema „Energie“, also /topics/Energy.
  2. Implementieren Sie in den nächsten Zeilen den Aufruf so:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Unter TopicManagementResponse finden Sie einige allgemeine Statistiken zu den Ergebnissen. So können Sie beispielsweise mit getSuccessCount die Anzahl der erfolgreich erstellten Themenabos ausdrucken.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Aktivieren Sie in der Funktion main abschließend nur Aufrufe der Funktion subscribeFcmRegistrationTokensToTopic.

Abo erstellen und Themennachricht senden

  1. Jetzt können Sie das Themenabo erstellen und eine Nachricht an das Abo senden.
  2. Führen Sie die main-Funktion 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 nach der Funktion sendMessageToFcmTopic.
    2. Legen Sie topicName auf das Thema „Energie“ fest, also /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, damit nur die Funktion sendMessageToFcmTopic aktiviert wird.
  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. App-Instanz im Vordergrund
    40ab6cf71e0e4116.png
    1. App-Instanz im Hintergrund
    8fba81037198209e.png

Serverseitiges Abbestellen von FCM-Registrierungstokens für FCM-Themen implementieren

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

8d9e8ea9d34016bd.png

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

11. Glückwunsch

Herzlichen Glückwunsch, Sie haben erfolgreich FCM-Themen verwendet, um Multicast-Nachrichten an Untergruppen Ihrer App-Instanzen zu senden. So können Sie Ihre Nutzer einfacher und zeitnah mit relevanten Inhalten erreichen.

947def3eb33b1e4a.gif

Nächste Schritte

Nachdem Sie das Codelab abgeschlossen haben, können Sie mit den folgenden Anleitungen Themen für andere Plattformen ausprobieren:

Referenzdokumente