Gérer les abonnements aux thèmes

Vous pouvez abonner une application cliente à un thème depuis le serveur ou le client :

Gérer les abonnements aux thèmes à l'aide de l'API serveur d'abonnement aux thèmes

Pour abonner un enregistrement FCM à un thème, transmettez l'ID d'enregistrement (ID d'installation Firebase ou jeton d'enregistrement FCM) à l'API serveur d'abonnement aux thèmes FCM, comme indiqué.

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

{}

Commande curl :

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}

En cas de réussite, la réponse de l'API HTTP v1 est un objet JSON contenant le nom de la ressource, le nom du thème et l'horodatage.

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

L'API d'abonnements aux thèmes FCM V1 vous permet également de désabonner un jeton d'un thème via une requête DELETE :

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

{}

Commande curl :

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}

Vous pouvez également lister les abonnements aux thèmes d'un ID d'enregistrement via une requête GET :

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

Commande curl :

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

En cas de réussite, la réponse de l'API HTTP v1 est un objet JSON contenant une liste d'abonnements aux thèmes.

    {
        "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"
          },
        ...
        ]
    }

Gérer les abonnements aux thèmes à l'aide du SDK Admin

Le Firebase Admin SDK vous permet d'effectuer des tâches de gestion de base des thèmes côté serveur. En fonction de leurs jetons d'enregistrement, vous pouvez abonner et désabonner des instances d'applications clientes en bloc à l'aide de la logique du serveur.

Vous pouvez abonner des instances d'applications clientes à n'importe quel thème existant ou créer un thème. Lorsque vous utilisez l'API pour abonner une application cliente à un nouveau thème (qui n'existe pas encore pour votre projet Firebase), un thème portant ce nom est créé dans FCM, et n'importe quel client peut ensuite s'y abonner.

Vous pouvez transmettre une liste de jetons d'enregistrement à la méthode d'abonnement Firebase Admin SDK pour abonner les appareils correspondants à un thème :

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");

Le Firebase Admin SDK vous permet également de désabonner des appareils d'un thème en transmettant des jetons d'enregistrement à la méthode appropriée :

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");

Les méthodes subscribeToTopic() et unsubscribeFromTopic() génèrent un objet contenant la réponse de FCM. Le type de retour a le même format, quel que soit le nombre de jetons d'enregistrement spécifiés dans la requête.

En cas d'erreur (échec de l'authentification, jeton ou thème non valide, etc.), ces méthodes génèrent une erreur. Pour obtenir la liste complète des codes d'erreur, y compris les descriptions et les étapes de résolution, consultez Firebase Admin SDK Erreurs.

Gérer les abonnements aux thèmes depuis votre application cliente

Les instances d'applications clientes peuvent également être abonnées ou désabonnées à des thèmes directement depuis votre application via les SDK Firebase. Notez que FCM effectue des nouvelles tentatives en cas d'échec initial pour s'assurer que l'abonnement est réussi.

Choisissez votre plate-forme :

Android

Les applications clientes peuvent s'abonner à n'importe quel thème existant ou créer un nouveau thème. Lorsqu'une application cliente s'abonne à un nouveau nom de thème (qui n'existe pas encore pour votre projet Firebase), un thème portant ce nom est créé dans FCM et n'importe quel client peut ensuite s'y abonner.

Pour s'abonner à un thème, l'application cliente appelle Firebase Cloud Messaging subscribeToTopic() avec le nom du thème FCM. Cette méthode renvoie un Task, qui peut être utilisé par un écouteur de finalisation pour déterminer si l'abonnement a réussi :

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();
            }
        });

Pour se désabonner, l'application cliente appelle Firebase Cloud Messaging unsubscribeFromTopic() avec le nom du thème.

iOS

Les applications clientes peuvent s'abonner à n'importe quel thème existant ou créer un nouveau thème. Lorsqu'une application cliente s'abonne à un nouveau nom de thème (qui n'existe pas encore pour votre projet Firebase), un thème portant ce nom est créé dans FCM et n'importe quel client peut ensuite s'y abonner.

Pour vous abonner à un thème, appelez la méthode d'abonnement à partir du thread principal de votre application (FCM n'est pas thread-safe). Si la requête d'abonnement échoue initialement, FCM effectue automatiquement de nouvelles tentatives. Dans les cas où l'abonnement ne peut pas être finalisé, l'abonnement génère une erreur que vous pouvez intercepter dans un gestionnaire de finalisation, comme indiqué :

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");
}];

Cet appel effectue une requête asynchrone auprès du FCM backend et abonne le client au thème donné. Avant d'appeler subscribeToTopic:topic, assurez-vous que l'instance de l'application cliente a déjà reçu un jeton d'enregistrement via le rappel didReceiveRegistrationToken.

Chaque fois que l'application démarre, FCM s'assure que tous les thèmes demandés ont été abonnés. Pour vous désabonner, appelez unsubscribeFromTopic:topic, et FCM se désabonne du thème en arrière-plan.

C++

Pour vous abonner à un thème, appelez ::firebase::messaging::Subscribe depuis votre application. Cet appel effectue une requête asynchrone auprès du FCM backend et abonne le client au thème donné.

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

Si la requête d'abonnement échoue initialement, FCM effectue de nouvelles tentatives jusqu' à ce qu'il puisse s'abonner au thème. Chaque fois que l'application démarre, FCM s'assure que tous les thèmes demandés ont été abonnés.

Pour vous désabonner, appelez ::firebase::messaging::Unsubscribe, et FCM se désabonne du thème en arrière-plan.

Unity

Pour vous abonner à un thème, appelez Firebase.Messaging.FirebaseMessaging.Subscribe depuis votre application. Cet appel effectue une requête asynchrone auprès du FCM backend et abonne le client au thème donné.

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

Si la requête d'abonnement échoue initialement, FCM effectue de nouvelles tentatives jusqu' à ce qu'il puisse s'abonner au thème. Chaque fois que l'application démarre, FCM s'assure que tous les thèmes demandés ont été abonnés.

Pour vous désabonner, appelez Firebase.Messaging.FirebaseMessaging.Unsubscribe, et FCM se désabonne du thème en arrière-plan.

Gestion des thèmes côté serveur (obsolète)

Pour comprendre ce que sont les ID d'instance, consultez la page ID d'instance. Pour en savoir plus sur les points de terminaison obsolètes, consultez la documentation de référence de l'API ID d'instance.

Gérer les abonnements aux thèmes en cas de changement d'ID d'installation Firebase ou de jeton

Lorsque l'ID d'installation Firebase ou le FCM jeton d'une application change, les abonnements aux thèmes associés à l'ancien ID d'installation Firebase ou jeton ne sont pas migrés. Par conséquent, le nouvel identifiant n'a aucun abonnement aux thèmes. En règle générale, un jeton ne change pas lors des mises à jour d'application ou des actualisations de jeton. La raison la plus courante d'un changement de jeton est la suppression/rotation de l'ID d'installation Firebase, qui peut être surveillée en suivant Surveiller le cycle de vie de l'ID d'installation Firebase.

Si vous souhaitez conserver les abonnements aux thèmes en cas de changement d'ID d'installation Firebase ou de jeton, vous devez sauvegarder les données d'abonnement aux thèmes sur le client ou le backend, puis abonner le nouvel identifiant aux thèmes auxquels l'instance de l'application était précédemment abonnée. Firebase ne fournit aucune fonctionnalité automatique pour suivre ou migrer ces abonnements. Il s'agit d'une tâche que vous devez implémenter manuellement dans votre application et votre backend.