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
- 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.
- Sie können die Aktivierung von Google Analytics überspringen. Für dieses Codelab benötigen Sie ihn nicht. Klicken Sie auf Weiter.
- 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.
Android konfigurieren
- 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 :
- Der wichtige Wert, den Sie angeben müssen, ist der Android-Paketname. Legen Sie
com.ticker.stocknews
fest.- 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:- Öffnen Sie im Verzeichnis StockNewsApp die Datei
app/src/main/AndroidManifest.xml
. - Suchen Sie im
manifest
-Element nach dem Stringwert des Attributspackage
. Dieser Wert ist der Android-Paketname.
- Öffnen Sie im Verzeichnis StockNewsApp die Datei
- Der hier angegebene Paketname muss mit dem im
- Fügen Sie im Firebase-Dialogfeld den kopierten Paketnamen in das Feld Android-Paketname ein.
- 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.
- Klicken Sie auf Register App (App registrieren).
- Folgen Sie in der Firebase Console der Anleitung zum Herunterladen der Konfigurationsdatei
google-services.json
. - 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.
- Kopieren Sie die Datei
google-services.json
, die Sie gerade heruntergeladen haben, in das Verzeichnismessaging/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.
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:
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.
- Im
AndroidManifest.xml
wurde bereits einMESSAGING_EVENT
-Callback-Handler hinzugefügt.- Der Handler
StockNewsMessagingService.java
erweitert dieFirebaseMessagingService
-Klasse, die verschiedene Funktionen für Firebase Cloud Messaging bietet. Weitere Informationen finden Sie in der FirebaseMessagingService-Dokumentation.
- 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.- Weitere Informationen zu den Unterschieden zwischen der Zustellung und Verarbeitung von Nachrichten im Hintergrund und im Vordergrund finden Sie unter Nachrichten in einer Android-App empfangen.
- Der Handler
- Außerdem gibt es in
AndroidManifest.xml
eine Android-Application
-Klasse namensStockNewsApplication
.- Diese Klasse wird als erste instanziiert, wenn die App gestartet wird.
- In der Funktion
onCreate
der KlasseStockNewsApplication
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 dieRecyclerView
hinzu, die die Auswahl für die Aktienkategorie anzeigt. SubscriptionAdapter.java
implementiertRecyclerView.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.
Start-App ausführen
- Verbinde dein Android-Gerät mit deinem Computer oder starte einen Emulator.
- Wählen Sie in der oberen Symbolleiste Ihr Android-Zielgerät oder Emulator aus und klicken Sie auf die Schaltfläche „Ausführen“.
- Die Benutzeroberfläche der App sieht so aus:
- Die App erstellt ein FCM-Registrierungstoken und protokolliert es. An der App-Benutzeroberfläche ändert sich jedoch nichts.
- Kopieren und speichern Sie das FCM-Registrierungstoken, da es in den nächsten Schritten verwendet wird.
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:
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.
- 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 sendensendMessageToFcmTopic
: 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
- Zuerst müssen wir ein Firebase-Dienstkonto einrichten, mit dem das firebase-admin SDK Aufrufe von FCM APIs autorisieren kann.
- Rufen Sie die Firebase Console auf, klicken Sie in der linken Navigationsleiste neben Projektübersicht auf das Zahnradsymbol und wählen Sie Projekteinstellungen aus.
- Wählen Sie auf der Seite „Einstellungen“ die Option Dienstkonten aus und klicken Sie auf Dienstkonto erstellen.
- Klicken Sie jetzt auf die Schaltfläche Neuen privaten Schlüssel generieren. Daraufhin wird die Schlüsseldatei automatisch heruntergeladen.
- Benennen Sie die Schlüsseldatei in
service-account.json
um und kopieren Sie sie in den Ordnermessaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
. - Sowohl
FcmSender.java
als auchFcmSubscriptionManager.java
laden die Dateiservice-account.json
mit dem folgenden Code aus dem Klassenpfad.
- Rufen Sie die Firebase Console auf, klicken Sie in der linken Navigationsleiste neben Projektübersicht auf das Zahnradsymbol und wählen Sie Projekteinstellungen aus.
- Jetzt steht der Servercode bereit. Build ausführen -> Build Project (Projekt erstellen) aus.
Testnachricht senden
- Suchen Sie in
FcmSender.java
nach der FunktionsendMessageToFcmRegistrationToken
und fügen Sie das FCM-Registrierungstoken, das Sie im Abschnitt Starter App ausführen kopiert haben, in das FeldregistrationToken
ein. - Entfernen Sie in der Funktion
main
die Kommentarzeichen für die FunktionsendMessageToFcmRegistrationToken
und klicken Sie auf „Ausführen“, um den Code auszuführen.- Sehen Sie sich an, wie das FCM-Registrierungstoken im Feld
Token
desmessage
-Objekts festgelegt ist. - Außerdem haben wir die
send
API derFirebaseMessaging
-Oberfläche verwendet.
- Sehen Sie sich an, wie das FCM-Registrierungstoken im Feld
- Dadurch sollte eine Nachricht an die App-Instanz gesendet werden, die Sie im vorherigen Schritt eingerichtet haben.
- Wenn sich die App-Instanz im Vordergrund befindet, sollte der Nachrichteninhalt protokolliert werden.
- Wenn sich die App-Instanz im Hintergrund befindet, wird die Nachricht in der Benachrichtigungsleiste angezeigt.
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 KlasseRecyclerViewViewHolder
.
- 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 vomonBindViewHolder
des RecyclerView-Adapters aufgerufen, um den ViewHolder mit der entsprechenden Stock-Kategorie zu verknüpfen.
Themenabo implementieren
- In der Methode
subscribeToStockCategory
implementieren Sie den Aufruf dersubscribeToTopic
API desFirebaseMessaging
-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
- 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
- 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
- Wechseln Sie im Servercode zu
FcmSender.java
und suchen Sie die MethodesendMessageToFcmTopic
.
- 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
.
- Es ist ein String im Format
- Erstellen Sie in den nächsten Zeilen ein neues
message
-Objekt, das dem in dersendMessageToFcmRegistrationToken
-Funktion definierten ähnelt.- Statt das Feld
Token
desmessage
-Objekts festzulegen, legen Sie stattdessen das FeldTopic
fest.
- Statt das Feld
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();
- Fügen Sie nun den Aufruf zur Instanz
FirebaseMessaging
hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der FunktionsendMessageToFcmRegistrationToken
).
FirebaseMessaging.getInstance().send(message);
- Aktualisieren Sie abschließend die
main
-Funktion und aktivieren Sie nur den Aufruf dersendMessageToFcmTopic
-Funktion.
Nachricht senden und Empfang bestätigen
- 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.
- Dazu musst du die entsprechende Ein/Aus-Schaltfläche umdrehen. Beispiel:
- Sie können jetzt Ihre Themennachricht senden, indem Sie die Funktion
main
vonFcmSender.java
ausführen. - Wie zuvor sollten Sie den Empfang der Nachricht in der App-Instanz sehen können.
- App-Instanz im Vordergrund
- App-Instanz im Hintergrund
- 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
- Gehen Sie zurück zum Servercode und suchen Sie die Methode mit dem Namen
sendMessageToFcmTopicCondition
.
- 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. - Erstellen Sie in den nächsten Zeilen ein neues
message
-Objekt, das dem in dersendMessageToFcmTopic
-Funktion definierten Objekt ähnelt.- Der Unterschied besteht darin, dass Sie anstelle des Felds
Topic
des Objekts das FeldCondition
festlegen.
- Der Unterschied besteht darin, dass Sie anstelle des Felds
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();
- Fügen Sie nun den Aufruf zur Instanz
FirebaseMessaging
hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in der FunktionsendMessageToFcmTopic
).
FirebaseMessaging.getInstance().send(message);
- Aktualisieren Sie abschließend die
main
-Funktion und aktivieren Sie nur den Aufruf dersendMessageToFcmTopicCondition
-Funktion.
Nachricht senden und Empfang prüfen
- 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.
- Sie können jetzt Ihre Themennachricht senden, indem Sie die Funktion
main
vonFcmSender.java
ausführen. - Wie zuvor sollten Sie den Empfang der Nachricht auf der App-Instanz beobachten können.
- Anwendungsinstanz im Vordergrund
- Anwendungsinstanz im Hintergrund
- 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.
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
- Springen Sie im Servercode zum
FcmSubscriptionManager.java
-Kurs. Suchen Sie die Methode mit dem NamensubscribeFcmRegistrationTokensToTopic
. Den Aufruf dersubscribeToTopic
API implementieren Sie hier.
- Abonnieren wir das Thema „Energie“ für die App-Instanz. Geben Sie dazu zunächst Daten für die folgenden beiden Felder an:
registrationTokens
: eine durch Kommas getrennte Liste von Strings, die die FCM-Registrierungstokens darstellen, für die Sie Themenabos erstellen möchten.topicName
: der Name des Themas für das Energiethema, z.B./topics/Energy
.
- Implementieren Sie den Aufruf in den nächsten Zeilen wie folgt:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic( registrationTokens, topicName);
- Sie können
TopicManagementResponse
auf allgemeine Ergebnisstatistiken prüfen. Es wird z. B. mitgetSuccessCount
die Anzahl der erfolgreich erstellten Themenabos ausgegeben.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- Schließlich ermöglichen Sie in der Funktion
main
nur Aufrufe der FunktionsubscribeFcmRegistrationTokensToTopic
.
Abo erstellen und Themennachricht senden
- Jetzt können Sie das Themenabo erstellen und eine Nachricht an dieses senden.
- Führen Sie die Funktion
main
der KlasseFcmSubscriptionManager.java
aus. Dadurch wird ein Themenabo erstellt. - Richten Sie nun den Code zum Senden der Nachricht ein. Ähnlich wie zuvor
- Suchen Sie in der
FcmSender.java
die FunktionsendMessageToFcmTopic
. - Legen Sie für
topicName
das Thema „Energie“ fest, z.B./topics/Energy
. - Erstellen Sie ein
Message
-Objekt und richten Sie es mitsetTopic
auf das Thema aus. - Aktualisieren Sie abschließend die Methode
main
, um nur die FunktionsendMessageToFcmTopic
zu aktivieren.
- Suchen Sie in der
- Führen Sie die
main
-Funktion vonFcmSender.java
aus. Dadurch wird die Nachricht an Ihre App-Instanz gesendet und Sie können sie in Ihrer App so beobachten:- Anwendungsinstanz im Vordergrund
- Anwendungsinstanz im Hintergrund
Serverseitige Abmeldung von FCM-Registrierungstokens für FCM-Thema implementieren
- Für serverseitiges Abbestellen von Themen kannst du diese
unsubscribeFromTopic
API verwenden. Fügen Sie den entsprechenden Code zur FunktionunsubscribeFcmRegistrationTokensFromTopic
der KlasseFcmSubscriptionManager.java
hinzu.
- 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.
Nächste Schritte
Nachdem Sie Ihr Codelab abgeschlossen haben, können Sie anhand der folgenden Leitfäden Themen für andere Plattformen ausprobieren: