Themenabos verwalten

Sie können eine Client-App entweder vom Server oder vom Client aus für ein Thema abonnieren:

  • Auf dem Server mit der FCM-Themenabo-Server-API oder Firebase Admin SDK.

  • Auf dem Client mit der clientseitigen API in Ihrer App.

Themenabos mit der Themenabo-Server-API verwalten

Wenn Sie eine FCM-Registrierung für ein Thema abonnieren möchten, übergeben Sie die Registrierungs-ID (Firebase Installations-ID oder FCM-Registrierungstoken) wie unten gezeigt an die FCM-Themenabo-Server API.

REST

POST https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions?topic_name=${TOPIC_NAME}

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{}

curl-Befehl:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{}'
https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions?topic_name=${TOPIC_NAME}

Bei Erfolg ist die HTTP V1 API-Antwort ein JSON-Objekt mit dem Ressourcennamen, dem Namen des Themas und dem Zeitstempel.

    {
      "topic_name": "${TOPIC_NAME}",
      "create_time": "2026-01-15T01:30:15.01Z"
    }

Mit der FCM V1-Themenabo-API können Sie ein Token auch mit einer DELETE-Anfrage von einem Thema abmelden:

REST

DELETE https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions/${TOPIC_NAME}

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{}

curl-Befehl:

curl -X DELETE -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{}'
https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions/${TOPIC_NAME}

Sie können die Themenabos einer Registrierungs-ID auch mit einer GET-Anfrage auflisten:

REST

GET https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

curl-Befehl:

curl -X GET -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json"
https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/registrations/${REGISTRATION_ID}/topicSubscriptions

Bei Erfolg ist die HTTP V1 API-Antwort ein JSON-Objekt mit einer Liste von Themenabos.

    {
        "topic_subscriptions": [
          {
              "topic_name": "${TOPIC_NAME1}",
              "create_time": "2026-01-15T01:30:15.01Z"
          },
          {
              "topic_name": "${TOPIC_NAME2}",
              "create_time": "2026-01-16T02:40:17.01Z"
          },
        ...
        ]
    }

Themenabos mit dem Admin SDK verwalten

Das Firebase Admin SDK ermöglicht Ihnen die Ausführung grundlegender Aufgaben zur Themenverwaltung serverseitig. Mit den Registrierungstokens können Sie Client-App-Instanzen mithilfe der Serverlogik im Bulk abonnieren und abmelden.

Sie können Client-App-Instanzen für jedes vorhandene Thema abonnieren oder ein neues Thema erstellen. Wenn Sie die API verwenden, um eine Client-App für ein neues Thema zu abonnieren (ein Thema, das für Ihr Firebase-Projekt noch nicht vorhanden ist), wird in FCM ein neues Thema mit diesem Namen erstellt und jeder Client kann es anschließend abonnieren.

Sie können eine Liste von Registrierungstokens an die Firebase Admin SDK Abomethode übergeben, um die entsprechenden Geräte für ein Thema zu abonnieren:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Subscribe the devices corresponding to the registration tokens to the
// topic.
getMessaging().subscribeToTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully subscribed to topic:', response);
  })
  .catch((error) => {
    console.log('Error subscribing to topic:', error);
  });

Java

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Subscribe the devices corresponding to the registration tokens to the
// topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopicAsync(
    registrationTokens, topic).get();
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were subscribed successfully");

Python

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Subscribe the devices corresponding to the registration tokens to the
# topic.
response = messaging.subscribe_to_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were subscribed successfully')

Go

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Subscribe the devices corresponding to the registration tokens to the
// topic.
response, err := client.SubscribeToTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were subscribed successfully")

C#

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Subscribe the devices corresponding to the registration tokens to the
// topic
var response = await FirebaseMessaging.DefaultInstance.SubscribeToTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were subscribed successfully");

Mit dem Firebase Admin SDK können Sie Geräte auch von einem Thema abmelden indem Sie Registrierungstokens an die entsprechende Methode übergeben:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
getMessaging().unsubscribeFromTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully unsubscribed from topic:', response);
  })
  .catch((error) => {
    console.log('Error unsubscribing from topic:', error);
  });

Java

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().unsubscribeFromTopicAsync(
    registrationTokens, topic).get();
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were unsubscribed successfully");

Python

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Unubscribe the devices corresponding to the registration tokens from the
# topic.
response = messaging.unsubscribe_from_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were unsubscribed successfully')

Go

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
response, err := client.UnsubscribeFromTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were unsubscribed successfully")

C#

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Unsubscribe the devices corresponding to the registration tokens from the
// topic
var response = await FirebaseMessaging.DefaultInstance.UnsubscribeFromTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were unsubscribed successfully");

Die Methoden subscribeToTopic() und unsubscribeFromTopic() führen zu einem Objekt mit der Antwort von FCM. Der Rückgabetyp hat unabhängig von der Anzahl der in der Anfrage angegebenen Registrierungstokens dasselbe Format.

Bei einem Fehler (Authentifizierungsfehler, ungültiges Token oder Thema usw.) führen diese Methoden zu einem Fehler. Eine vollständige Liste der Fehlercodes mit Beschreibungen und Schritten zur Fehlerbehebung finden Sie unter Firebase Admin SDK Fehler.

Themenabos über Ihre Client-App verwalten

Client-App-Instanzen können auch direkt über Ihre App mit den Firebase SDKs für Themen abonniert oder abgemeldet werden. Beachten Sie, dass FCM Wiederholungen ausführt, falls anfängliche Fehler auftreten, um sicherzustellen, dass das Abo erfolgreich ist.

Wählen Sie Ihre Plattform aus:

Android

Client-Apps können jedes vorhandene Thema abonnieren oder ein neues Thema erstellen. Wenn eine Client-App einen neuen Themennamen abonniert (ein Thema, das für Ihr Firebase-Projekt noch nicht vorhanden ist), wird in FCM ein neues Thema mit diesem Namen erstellt und jeder Client kann es anschließend abonnieren.

Um ein Thema zu abonnieren, ruft die Client-App Firebase Cloud Messaging subscribeToTopic() mit dem FCM Themennamen auf. Diese Methode gibt eine Task zurück, mit der ein Abschlusslistener ermitteln kann, ob das Abo erfolgreich war:

Kotlin

Firebase.messaging.subscribeToTopic("weather")
    .addOnCompleteListener { task ->
        var msg = "Subscribed"
        if (!task.isSuccessful) {
            msg = "Subscribe failed"
        }
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    }

Java

FirebaseMessaging.getInstance().subscribeToTopic("weather")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                String msg = "Subscribed";
                if (!task.isSuccessful()) {
                    msg = "Subscribe failed";
                }
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Um das Abo zu beenden, ruft die Client-App Firebase Cloud Messaging unsubscribeFromTopic() mit dem Themennamen auf.

iOS

Client-Apps können jedes vorhandene Thema abonnieren oder ein neues Thema erstellen. Wenn eine Client-App einen neuen Themennamen abonniert (ein Thema, das für Ihr Firebase-Projekt noch nicht vorhanden ist), wird in FCM ein neues Thema mit diesem Namen erstellt und jeder Client kann es anschließend abonnieren.

Rufen Sie die Abomethode im Hauptthread Ihrer Anwendung auf, um ein Thema zu abonnieren (FCM ist nicht threadsicher). Wenn die Aboanfrage anfänglich fehlschlägt, werden von FCM automatisch Wiederholungen ausgeführt. Wenn das Abo nicht abgeschlossen werden kann, wird ein Fehler ausgelöst, den Sie wie unten gezeigt in einem Abschluss-Handler abfangen können:

Swift

Messaging.messaging().subscribe(toTopic: "weather") { error in
  print("Subscribed to weather topic")
}

Objective-C

[[FIRMessaging messaging] subscribeToTopic:@"weather"
                                completion:^(NSError * _Nullable error) {
  NSLog(@"Subscribed to weather topic");
}];

Mit diesem Aufruf wird eine asynchrone Anfrage an das FCM Back-End gesendet und der Client für das angegebene Thema abonniert. Bevor Sie subscribeToTopic:topic aufrufen, muss die Client-App-Instanz bereits ein Registrierungstoken über den Callback didReceiveRegistrationToken erhalten haben.

Jedes Mal, wenn die App gestartet wird, FCM prüft, ob alle angeforderten Themen abonniert wurden. Rufen Sie unsubscribeFromTopic:topic auf, um das Abo zu beenden. FCM meldet das Abo dann im Hintergrund ab.

C++

Rufen Sie ::firebase::messaging::Subscribe in Ihrer Anwendung auf, um ein Thema zu abonnieren. Dadurch wird eine asynchrone Anfrage an das FCM Back-End gesendet und der Client für das angegebene Thema abonniert.

::firebase::messaging::Subscribe("example");

Wenn die Aboanfrage anfänglich fehlschlägt, werden von FCM Wiederholungen ausgeführt, bis das Abo erfolgreich ist. Jedes Mal, wenn die App gestartet wird, FCM prüft, ob alle angeforderten Themen abonniert wurden.

Rufen Sie ::firebase::messaging::Unsubscribe, auf, um das Abo zu beenden. FCM meldet das Abo dann im Hintergrund ab.

Einheit

Rufen Sie Firebase.Messaging.FirebaseMessaging.Subscribe in Ihrer Anwendung auf, um ein Thema zu abonnieren. Dadurch wird eine asynchrone Anfrage an das FCM Back-End gesendet und der Client für das angegebene Thema abonniert.

Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");

Wenn die Aboanfrage anfänglich fehlschlägt, werden von FCM Wiederholungen ausgeführt, bis das Abo erfolgreich ist. Jedes Mal, wenn die App gestartet wird, FCM prüft, ob alle angeforderten Themen abonniert wurden.

Rufen Sie Firebase.Messaging.FirebaseMessaging.Unsubscribe, auf, um das Abo zu beenden. FCM meldet das Abo dann im Hintergrund ab.

Legacy-Themenverwaltung auf Serverseite (verworfen)

Informationen zu Instanz-IDs finden Sie auf der Seite Instanz-ID. Details zu den verworfenen Endpunkten finden Sie in der API-Referenz zur Instanz-ID.

Themenabos bei FID- oder Tokenänderung verwalten

Wenn sich die FID (Firebase-Installations-ID) oder das FCM Token einer App ändert, werden die Themenabos, die mit der alten FID oder dem alten Token verknüpft sind, nicht migriert. Daher hat der neue Bezeichner kein Themenabo. In der Regel ändert sich ein Token nicht bei App-Updates oder Tokenaktualisierungen. Der häufigste Grund für eine Tokenänderung ist das Löschen/Rotieren der FID, das Sie mit dem Lebenszyklus der Firebase-Installations-ID verfolgen können.

Wenn Sie die Themenabos bei FID- oder Tokenänderungen beibehalten möchten, müssen Sie die Daten zu den Themenabos auf dem Client oder Back-End sichern und den neuen Bezeichner für die Themen abonnieren, für die die App-Instanz zuvor abonniert war. Firebase bietet keine automatischen Funktionen oder Möglichkeiten, diese Abos zu verfolgen oder zu migrieren. Diese Aufgabe müssen Sie manuell in Ihrer App und Ihrem Back-End implementieren.