Themenabos verwalten

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

Themenabos mit der Topic Subscription 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 gezeigt an die FCM Topic Subscription 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 Antwort der HTTP v1 API ein JSON-Objekt, das den Ressourcennamen, den Themennamen und den Zeitstempel enthält.

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

Mit der FCM V1 Topics Subscriptions API können Sie ein Token auch über eine 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 über eine 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 Antwort der HTTP v1 API ein JSON-Objekt, das eine Liste von Themenabos enthält.

    {
        "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

Mit dem Firebase Admin SDK können Sie grundlegende Aufgaben zur Themenverwaltung serverseitig ausführen. Anhand der Registrierungstokens können Sie Client-App-Instanzen mithilfe von Serverlogik im Bulk-Verfahren abonnieren und abbestellen.

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 Abomethode Firebase Admin SDK ü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 auch die Registrierung von Geräten für ein Thema aufheben, 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, das die Antwort von FCM enthält. Der Rückgabetyp hat unabhängig von der Anzahl der in der Anfrage angegebenen Registrierungstokens dasselbe Format.

Im Falle eines Fehlers (Authentifizierungsfehler, ungültiges Token oder Thema usw.) führen diese Methoden zu einem Fehler. Eine vollständige Liste der Fehlercodes, einschließlich 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 mithilfe der Firebase SDKs Themen abonnieren oder abbestellen. Beachten Sie, dass FCM bei anfänglichen Fehlern wiederholt wird, um sicherzustellen, dass das Abo erfolgreich ist.

Plattform auswählen:

Android

Clientanwendungen können jedes vorhandene Thema abonnieren oder ein neues Thema erstellen. Wenn eine Client-App ein neues Thema abonniert (das noch nicht für Ihr Firebase-Projekt 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 Themennamen FCM auf. Diese Methode gibt ein Task zurück, mit dem ein Completion Listener feststellen 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();
            }
        });

Zum Abbestellen ruft die Client-App Firebase Cloud Messaging unsubscribeFromTopic() mit dem Themennamen auf.

iOS

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

Wenn Sie ein Thema abonnieren möchten, rufen Sie die Abomethode im Hauptthread Ihrer Anwendung auf (FCM ist nicht threadsicher). Wenn die Aboanfrage fehlschlägt, versucht FCM es automatisch noch einmal. Wenn das Abo nicht abgeschlossen werden kann, wird ein Fehler ausgegeben, den Sie wie folgt in einem Completion 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");
}];

Dieser Aufruf sendet eine asynchrone Anfrage an das FCM-Backend und abonniert das angegebene Thema für den Client. Bevor Sie subscribeToTopic:topic aufrufen, muss die Client-App-Instanz bereits ein Registrierungstoken über den Callback didReceiveRegistrationToken erhalten haben.

Bei jedem Start der App sorgt FCM dafür, dass alle angeforderten Themen abonniert wurden. Zum Abbestellen rufen Sie unsubscribeFromTopic:topic auf. FCM wird dann im Hintergrund vom Thema abgemeldet.

C++

Wenn Sie ein Thema abonnieren möchten, rufen Sie ::firebase::messaging::Subscribe in Ihrer Anwendung auf. Dadurch wird eine asynchrone Anfrage an das FCM-Backend gesendet und der Client wird für das angegebene Thema abonniert.

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

Wenn die Aboanfrage fehlschlägt, versucht FCM es so lange, bis das Thema erfolgreich abonniert werden kann. Bei jedem Start der App sorgt FCM dafür, dass alle angeforderten Themen abonniert wurden.

Wenn Sie das Abo kündigen möchten, rufen Sie ::firebase::messaging::Unsubscribe auf. FCM kündigt das Abo für das Thema im Hintergrund.

Einheit

Wenn Sie ein Thema abonnieren möchten, rufen Sie Firebase.Messaging.FirebaseMessaging.Subscribe aus Ihrer Anwendung auf. Dadurch wird eine asynchrone Anfrage an das FCM-Backend gesendet und der Client wird für das angegebene Thema abonniert.

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

Wenn die Aboanfrage fehlschlägt, versucht FCM es so lange, bis das Thema erfolgreich abonniert werden kann. Bei jedem Start der App sorgt FCM dafür, dass alle angeforderten Themen abonniert wurden.

Wenn Sie das Abo kündigen möchten, rufen Sie Firebase.Messaging.FirebaseMessaging.Unsubscribe auf. FCM kündigt das Abo des Themas im Hintergrund.

Legacy-Themenverwaltung auf Serverseite (eingestellt)

Informationen zu Instanz-IDs finden Sie auf der Seite „Instanz-ID“. Weitere Informationen zu den verworfenen Endpunkten finden Sie in den Referenzen zur Instance ID API.

Themenabos bei FID- oder Tokenänderung verwalten

Wenn sich die FID (Firebase-Installations-ID) oder das FCM-Token einer App ändert, werden die mit der alten FID oder dem alten Token verknüpften Themenabos nicht migriert. Daher hat die neue Kennung kein Themenabo. In der Regel ändert sich ein Token bei App-Updates oder Tokenaktualisierungen nicht. Der häufigste Grund für eine Tokenänderung ist das Löschen/Rotieren der FID. Dies kann durch Überwachen des Lebenszyklus der Firebase-Installations-ID verfolgt werden.

Wenn Sie die Themenabos bei FID- oder Tokenänderungen beibehalten möchten, müssen Sie die Daten der Themenabos auf dem Client oder im Backend sichern und die neue Kennung für die Themen abonnieren, die die App-Instanz zuvor abonniert hatte. 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 Backend implementieren.