Google est engagé à faire progresser l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Envoyez des messages aux sujets sur l'unité

Basé sur le modèle, la messagerie vous permet FCM sujet publish / subscribe d'envoyer un message à plusieurs périphériques qui ont opté pour un sujet particulier. Vous rédigez des messages sujet en fonction des besoins et des poignées FCM routage et passer le message de manière fiable aux bons appareils.

Par exemple, les utilisateurs d'une application de prévision des marées locales pourraient opter pour un sujet « courants de marée d'alertes » et recevoir des notifications de conditions de pêche d'eau salée optimale dans des zones déterminées. Les utilisateurs d'une application sportive pourrait souscrire à des mises à jour automatiques des scores de jeu en direct pour leurs équipes favorites.

Certaines choses à garder à l'esprit sur des sujets:

  • Sujet messagerie est plus adapté pour des contenus tels que la météo ou d'autres informations accessibles au public.
  • Sujet messages sont optimisés pour un débit plutôt que la latence. Pour une livraison rapide et sécurisé aux appareils individuels ou de petits groupes de périphériques, des messages cibles aux jetons d'inscription , non sujets.
  • Si vous avez besoin d'envoyer des messages à plusieurs appareils par utilisateur, tenez compte de messagerie du groupe de périphériques pour les cas d'utilisation.
  • la messagerie prend en charge les abonnements illimités sujet pour chaque sujet. Cependant, la FCM impose des limites dans ces domaines:
    • Un exemple d'application peut être souscrit à pas plus de 2000 sujets.
    • Si vous utilisez l' importation de lots de souscrire des cas d'application, chaque demande est limitée à 1000 cas d'application.
    • La fréquence des nouvelles souscriptions est limité à taux par projet. Si vous envoyez trop de demandes de souscription dans un court laps de temps, les serveurs FCM répondront avec 429 RESOURCE_EXHAUSTED réponse ( « dépassement du quota »). Réessayez avec backoff exponentielle.

Abonnez-vous l'application client à un sujet

Pour vous abonner à un sujet, appelez Firebase.Messaging.FirebaseMessaging.Subscribe de votre application. Cela fait une requête asynchrone au back-end de la FCM et le client est abonné au sujet donné.

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

Si la demande de souscription ne d'abord, la FCM réessaie jusqu'à ce qu'il puisse souscrire à ce sujet avec succès. Chaque fois que le démarrage d'applications, la FCM veille à ce que tous les sujets demandés ont été souscrites.

Pour résilier votre abonnement, appelez Firebase.Messaging.FirebaseMessaging.Unsubscribe et FCM désinscrit du sujet en arrière - plan.

Gérer les abonnements sujet sur le serveur

Les Firebase Administrateur SDK et API ID Google instance vous permettent d'effectuer des tâches de gestion de base du sujet du côté du serveur. Compte tenu de leur enregistrement jeton (s), vous pouvez vous abonner et désabonner des instances d'applications client en vrac en utilisant la logique du serveur.

Vous pouvez vous abonner cas d'applications client à un sujet existant, ou vous pouvez créer un nouveau sujet. Lorsque vous utilisez l'API pour souscrire une application client à un nouveau sujet (celui qui n'existe pas déjà pour votre projet Firebase), un nouveau sujet de ce nom est créé dans la FCM et tout client peut souscrire par la suite à lui.

Et à l'aide de désabonnement Abonnez le Firebase Administrateur SDK

Vous pouvez passer une liste de jetons d'inscription à la méthode d'abonnement Firebase Administrateur SDK pour abonner les périphériques correspondant à un sujet:

Node.js

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

// Subscribe the devices corresponding to the registration tokens to the
// topic.
admin.messaging().subscribeToTopic(registrationTokens, topic)
  .then(function(response) {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully subscribed to topic:', response);
  })
  .catch(function(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')
 

Aller

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

L'API d'administration FCM vous permet également de dispositifs de désabonnement à partir d'un sujet en passant des jetons d'inscription à la méthode appropriée:

Node.js

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

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
admin.messaging().unsubscribeFromTopic(registrationTokens, topic)
  .then(function(response) {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully unsubscribed from topic:', response);
  })
  .catch(function(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')
 

Aller

 // 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 subscribeToTopic() et unsubscribeFromTopic() Méthodes résultats dans un objet contenant la réponse de la FCM. Le type de retour a le même format quel que soit le nombre de jetons d'enregistrement indiqués dans la demande.

Dans le cas d'une erreur (échecs d'authentification, jeton invalide ou sujet, etc.), ces méthodes entraînent une erreur. Pour une liste complète des codes d'erreur, y compris les descriptions et les étapes de résolution, voir Erreurs de l' API d' administration de la FCM .

Inscription et désinscription en utilisant les API ID d'instance

API Google ID instance facilitent les tâches de gestion des sujets suivants:

Recevoir et traiter les messages de sujet

La FCM offre des messages sujet de la même manière que d'autres messages en aval.

En souscrivant à l'événement Firebase.Messaging.FirebaseMessaging.MessageReceived vous pouvez effectuer des actions sur la base du message reçu et obtenir des données de message.

Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;

...

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message");
  if (e.Message.From.Length > 0)
    UnityEngine.Debug.Log("from: " + e.Message.From);
  if (e.Message.Data.Count > 0) {
    UnityEngine.Debug.Log("data:");
    foreach (System.Collections.Generic.KeyValuePair iter in
             e.Message.Data) {
      UnityEngine.Debug.Log("  " + iter.Key + ": " + iter.Value);
    }
  }
}

demandes de construction d'envoi

Une fois que vous avez créé un sujet, que ce soit en souscrivant des instances d'applications client au sujet du côté client ou via l' API du serveur , vous pouvez envoyer des messages à ce sujet. Si ceci est votre première fois la construction envoyer des demandes de la FCM, consultez le guide de votre environnement de serveur et la FCM pour arrière - plan et des informations importantes de configuration.

Dans votre logique d'émission sur le back-end, spécifiez comme indiqué le nom du sujet souhaité:

Node.js

 // The topic name can be optionally prefixed with "/topics/".
var topic = 'highScores';

var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  topic: topic
};

// Send a message to devices subscribed to the provided topic.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });
 

Java

 // The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setTopic(topic)
    .build();

// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response); 

Python

 # The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    topic=topic,
)

# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response) 

Aller

 // The topic name can be optionally prefixed with "/topics/".
topic := "highScores"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Topic: topic,
}

// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response) 

C #

 // The topic name can be optionally prefixed with "/topics/".
var topic = "highScores";

// See documentation on defining a message payload.
var message = new Message()
{
    Data = new Dictionary<string, string>()
    {
        { "score", "850" },
        { "time", "2:45" },
    },
    Topic = topic,
};

// Send a message to the devices subscribed to the provided topic.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
 

DU REPOS

 POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
  "message":{
    "topic" : "foo-bar",
    "notification" : {
      "body" : "This is a Firebase Cloud Messaging Topic Message!",
      "title" : "FCM Message"
      }
   }
}
 

commande curl:

 curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
  "message": {
    "topic" : "foo-bar",
    "notification": {
      "body": "This is a Firebase Cloud Messaging Topic Message!",
      "title": "FCM Message"
    }
  }
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
 

Pour envoyer un message à une combinaison de sujets, spécifier une condition, qui est une expression booléenne qui spécifie les sujets cibles. Par exemple, la condition suivante envoyer des messages à des dispositifs qui sont abonnés à TopicA et soit TopicB ou TopicC :

 "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
 

FCM évalue d'abord les conditions entre parenthèses, et évalue ensuite l'expression de gauche à droite. Dans l'expression ci-dessus, un utilisateur abonné à un sujet unique ne reçoit pas le message. De même, un utilisateur qui ne souscrit pas à TopicA ne reçoit pas le message. Ces combinaisons le reçoivent:

  • TopicA et TopicB
  • TopicA et TopicC

Vous pouvez inclure jusqu'à cinq sujets dans votre expression conditionnelle.

Pour envoyer à une condition:

Node.js

 // Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
var message = {
  notification: {
    title: '$GOOG up 1.43% on the day',
    body: '$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.'
  },
  condition: condition
};

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });
 

Java

 // Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
Message message = Message.builder()
    .setNotification(new Notification(
        "$GOOG up 1.43% on the day",
        "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."))
    .setCondition(condition)
    .build();

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response); 

Python

 # Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"

# See documentation on defining a message payload.
message = messaging.Message(
    notification=messaging.Notification(
        title='$GOOG up 1.43% on the day',
        body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
    ),
    condition=condition,
)

# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response) 

Aller

 // Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Condition: condition,
}

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response) 

C #

 // Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
var message = new Message()
{
    Notification = new Notification()
    {
        Title = "$GOOG up 1.43% on the day",
        Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
    },
    Condition = condition,
};

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
 

DU REPOS

 POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
   "message":{
    "condition": "'dogs' in topics || 'cats' in topics",
    "notification" : {
      "body" : "This is a Firebase Cloud Messaging Topic Message!",
      "title" : "FCM Message",
    }
  }
}
 

commande curl:

 curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
  "notification": {
    "title": "FCM Message",
    "body": "This is a Firebase Cloud Messaging Topic Message!",
  },
  "condition": "'dogs' in topics || 'cats' in topics"
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
 

Prochaines étapes