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
- 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.
- Sie können das Aktivieren von Google Analytics überspringen. Für dieses Codelab ist das nicht erforderlich. Klicken Sie auf Weiter.
- 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.
Android konfigurieren
- 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 :
- Der wichtigste Wert ist der Android-Paketname. Legen Sie
com.ticker.stocknews
fest.- 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:- Ö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 in der
- Fügen Sie im Firebase-Dialogfeld den kopierten Paketnamen in das Feld Android-Paketname ein.
- Für dieses Codelab benötigen Sie kein Debug-Signaturzertifikat SHA-1, da diese App nicht veröffentlicht wird. Lassen Sie dieses Feld leer.
- Klicken Sie auf App registrieren.
- Folgen Sie in der Firebase Console der Anleitung, um die Konfigurationsdatei
google-services.json
herunterzuladen. - 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
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.
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, 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.
- In der
AndroidManifest.xml
ist bereits einMESSAGING_EVENT
-Callback-Handler hinzugefügt.- Dieser Handler,
StockNewsMessagingService.java
, erweitert die KlasseFirebaseMessagingService
, die verschiedene Firebase Cloud Messaging-Funktionen 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.
- Dieser Handler,
- Außerdem wird in
AndroidManifest.xml
eine Android-Application
-Klasse namensStockNewsApplication
bereitgestellt.- Diese Klasse wird beim Starten der App als Erstes instanziiert.
- In der Funktion
onCreate
der KlasseStockNewsApplication
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 dasRecyclerView
hinzugefügt, über das die Optionen für die Lagerkategorie angezeigt werden. SubscriptionAdapter.java
implementiertRecyclerView.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.
Start-App ausführen
- Verbinden Sie Ihr Android-Gerät mit dem Computer oder starten Sie einen Emulator.
- Wählen Sie oben in der Symbolleiste Ihr Ziel-Android-Gerät oder -Emulator aus und drücken Sie die Schaltfläche „Ausführen“.
- Die App-Benutzeroberfläche 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 Projekt messaging/fcm-topics-codelab/starter/StockNewsServer
.
Die Projektansicht in der linken Navigationsleiste sollte in etwa so aussehen:
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.
- 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
- 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 beginnt der automatische Download Ihrer Schlüsseldatei.
- 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.
- Der Servercode ist jetzt fertig. Wählen Sie in der oberen Menüleiste „Build ausführen“ -> „Projekt erstellen“ aus.
Testnachricht senden
- Suchen Sie in
FcmSender.java
nach der FunktionsendMessageToFcmRegistrationToken
und fügen Sie das FCM-Registrierungstoken ein, das Sie aus dem Abschnitt Start-App ausführen kopiert haben, in das FeldregistrationToken
. - Entfernen Sie in der Funktion
main
nur den Kommentar bei der FunktionsendMessageToFcmRegistrationToken
und klicken Sie auf „Ausführen“, um den Code auszuführen.- Das FCM-Registrierungstoken wird im Feld
Token
desmessage
-Objekts festgelegt. - Beachten Sie außerdem, dass wir die
send
API derFirebaseMessaging
-Benutzeroberfläche verwendet haben.
- Das FCM-Registrierungstoken wird 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 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 KlasseRecyclerViewViewHolder
.
- 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 vononBindViewHolder
des RecyclerView-Adapters aufgerufen, um den ViewHolder an die entsprechende Stock-Kategorie zu binden.
Themenabos 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 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
- 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
- Rufen Sie im Servercode
FcmSender.java
auf und suchen Sie nach der Methode mit dem NamensendMessageToFcmTopic
.
- 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
.
- Es ist ein String vom Format
- Erstellen Sie in den nächsten Zeilen ein neues
message
-Objekt, das dem in dersendMessageToFcmRegistrationToken
-Funktion definierten ähnelt.- Der Unterschied besteht darin, dass Sie anstelle des Felds
Token
desmessage
-Objekts das FeldTopic
festlegen.
- Der Unterschied besteht darin, dass Sie anstelle des Felds
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 jetzt den Aufruf der
FirebaseMessaging
-Instanz hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in dersendMessageToFcmRegistrationToken
-Funktion).
FirebaseMessaging.getInstance().send(message);
- Aktualisieren Sie abschließend die Funktion
main
und aktivieren Sie den Aufruf nur für die FunktionsendMessageToFcmTopic
.
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.
- Das geht mit einem Klick auf den entsprechenden Schalter. Beispiel:
- Sie können die Themennachricht jetzt senden, indem Sie die
main
-Funktion 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: 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
- Gehen Sie zurück zum Servercode und suchen Sie die Methode mit dem Namen
sendMessageToFcmTopicCondition
.FcmSender.java
- 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 ä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 jetzt den Aufruf der
FirebaseMessaging
-Instanz hinzu, um die Nachricht zu senden (identisch mit dem Sendeaufruf in dersendMessageToFcmTopic
-Funktion).
FirebaseMessaging.getInstance().send(message);
- Aktualisieren Sie abschließend die Funktion
main
und aktivieren Sie den Aufruf nur für die FunktionsendMessageToFcmTopicCondition
.
Nachricht senden und Empfang bestätigen
- 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“.
- Sie können die Themennachricht jetzt senden, indem Sie die
main
-Funktion 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: 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.
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
- Springen Sie im Servercode zum
FcmSubscriptionManager.java
-Kurs. Suchen Sie die Methode mit dem NamensubscribeFcmRegistrationTokensToTopic
. Hier implementieren Sie den Aufruf dersubscribeToTopic
API.
- Abonnieren wir das Thema „Energie“ für die App-Instanz. Geben Sie dazu zuerst 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 Themenname für das Thema „Energie“, also/topics/Energy
.
- Implementieren Sie in den nächsten Zeilen den Aufruf so:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic( registrationTokens, topicName);
- Unter
TopicManagementResponse
finden Sie einige allgemeine Statistiken zu den Ergebnissen. So können Sie beispielsweise mitgetSuccessCount
die Anzahl der erfolgreich erstellten Themenabos ausdrucken.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- Aktivieren Sie in der Funktion
main
abschließend nur Aufrufe der FunktionsubscribeFcmRegistrationTokensToTopic
.
Abo erstellen und Themennachricht senden
- Jetzt können Sie das Themenabo erstellen und eine Nachricht an das Abo senden.
- Führen Sie die
main
-Funktion 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
nach der FunktionsendMessageToFcmTopic
. - Legen Sie
topicName
auf das Thema „Energie“ fest, also/topics/Energy
. - Erstellen Sie ein
Message
-Objekt und richten Sie es mitsetTopic
auf das Thema aus. - Aktualisieren Sie abschließend die Methode
main
, damit nur die FunktionsendMessageToFcmTopic
aktiviert wird.
- 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:- App-Instanz im Vordergrund
- App-Instanz im Hintergrund
Serverseitiges Abbestellen von FCM-Registrierungstokens für FCM-Themen implementieren
- Für serverseitiges Abbestellen von Themen kannst du diese
unsubscribeFromTopic
API verwenden. Sie fügen den relevanten Code derunsubscribeFcmRegistrationTokensFromTopic
-Funktion der KlasseFcmSubscriptionManager.java
hinzu.
- 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.
Nächste Schritte
Nachdem Sie das Codelab abgeschlossen haben, können Sie mit den folgenden Anleitungen Themen für andere Plattformen ausprobieren: