Gérer les abonnements aux thèmes

Vous pouvez abonner une application cliente à un sujet depuis le serveur ou le client :

  • Sur le serveur, à l'aide de Firebase Admin SDK.

  • Sur le client, en utilisant l'API côté client dans votre application.

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

Firebase Admin SDK vous permet d'effectuer des tâches de gestion de base des thèmes côté serveur. Grâce à leurs jetons d'enregistrement, vous pouvez abonner et désabonner des instances d'application cliente de manière groupée à l'aide de la logique du serveur.

Vous pouvez abonner des instances d'application cliente à n'importe quel sujet existant ou en créer un. 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 sujet :

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().subscribeToTopic(
    registrationTokens, topic);
// 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");

Firebase Admin SDK vous permet également de désabonner des appareils d'un sujet 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().unsubscribeFromTopic(
    registrationTokens, topic);
// 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é dans la requête.

En cas d'erreur (échec de l'authentification, jeton ou sujet non valides, 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 Erreurs Firebase Admin SDK.

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

Les instances d'application cliente peuvent également s'abonner ou se désabonner à 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.

Sélectionnez votre plate-forme :

Android

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

Pour s'abonner à un sujet, l'application cliente appelle Firebase Cloud Messaging subscribeToTopic() avec le nom du sujet FCM. Cette méthode renvoie un Task, qui peut être utilisé par un écouteur d'achèvement 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 sujet existant ou en créer un. Lorsqu'une application cliente s'abonne à un nouveau nom de sujet (qui n'existe pas encore pour votre projet Firebase), un sujet portant ce nom est créé dans FCM et n'importe quel client peut ensuite s'y abonner.

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

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 au backend FCM et abonne le client au sujet 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é souscrits. Pour se désabonner, appelez unsubscribeFromTopic:topic. FCM se désabonne du thème en arrière-plan.

C++

Pour vous abonner à un sujet, appelez ::firebase::messaging::Subscribe depuis votre application. Cela envoie une requête asynchrone au backend FCM et abonne le client au sujet donné.

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

Si la demande d'abonnement échoue initialement, FCM réessaie jusqu'à ce qu'il puisse s'abonner au sujet. Chaque fois que l'application démarre, FCM s'assure que tous les thèmes demandés ont été souscrits.

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

Unity

Pour vous abonner à un sujet, appelez Firebase.Messaging.FirebaseMessaging.Subscribe depuis votre application. Cela envoie une requête asynchrone au backend FCM et abonne le client au sujet donné.

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

Si la demande d'abonnement échoue initialement, FCM réessaie jusqu'à ce qu'il puisse s'abonner au sujet. Chaque fois que l'application démarre, FCM s'assure que tous les thèmes demandés ont été souscrits.

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

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

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