Puedes suscribir una app cliente a un tema desde el servidor o el cliente:
En el servidor, con Firebase Admin SDK
En el cliente, usando la API del cliente dentro de tu app
Administra suscripciones a temas con el SDK de Admin
El Firebase Admin SDK te permite realizar tareas básicas de administración de temas desde el servidor. Con los tokens de registro, puedes realizar y anular la suscripción de las instancias de la app cliente de forma masiva mediante la lógica del servidor.
Puedes suscribir instancias de la app cliente a cualquier tema existente o puedes crear un tema nuevo. Cuando una app cliente se suscribe mediante la API a un tema nuevo (uno que no existe aún para tu proyecto de Firebase), se crea un tema nuevo con ese nombre en FCM y, después, cualquier cliente se puede suscribir a él.
Puedes pasar una lista de estos tokens de registro al método de suscripción del Firebase Admin SDK para suscribir los dispositivos correspondientes a un tema, como en estos ejemplos:
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");
El Firebase Admin SDK también te permite anular la suscripción de dispositivos a un tema pasando los tokens de registro al método correspondiente, como en estos ejemplos:
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");
Los métodos subscribeToTopic()
y unsubscribeFromTopic()
generan un
objeto que contiene la respuesta de FCM. El tipo de datos que se muestra tiene el mismo formato, sin importar la cantidad de tokens de registro especificados en la solicitud.
En caso de falla (fallas de autenticación, token o tema no válido, etc.), los métodos muestran un error. Para ver una lista completa de los códigos de error con descripciones y pasos para su resolución, consulta Errores de Firebase Admin SDK.
Administra suscripciones a temas desde tu app cliente
Las instancias de la app cliente también pueden suscribirse o anular su suscripción a temas directamente desde tu app a través de los SDK de Firebase. Ten en cuenta que FCM vuelve a intentarlo en caso de fallas iniciales para garantizar que la suscripción se realice correctamente.
Elige tu plataforma:
Android
Las apps cliente se pueden suscribir a cualquier tema existente o pueden crear un tema nuevo. Cuando una app cliente se suscribe a un nombre de tema nuevo (uno que no existe aún para tu proyecto de Firebase), se crea un tema nuevo con ese nombre en FCM y cualquier cliente se puede suscribir a él posteriormente.
Para suscribirse a un tema, la app cliente llama a subscribeToTopic()
de Firebase Cloud Messaging con el nombre del tema de FCM. Este método
muestra una Task
, que un objeto de escucha de finalización puede usar para determinar si
la suscripción se realizó correctamente:
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(); } });
Para anular la suscripción, la app cliente llama a unsubscribeFromTopic()
de Firebase Cloud Messaging
con el nombre del tema.
iOS
Las apps cliente se pueden suscribir a cualquier tema existente o pueden crear un tema nuevo. Cuando una app cliente se suscribe a un nombre de tema nuevo (uno que no existe aún para tu proyecto de Firebase), se crea un tema nuevo con ese nombre en FCM y cualquier cliente se puede suscribir a él posteriormente.
Para suscribirte a un tema, llama al método de suscripción desde el subproceso principal de la aplicación (FCM no cuenta con protección de subprocesos). Si la solicitud de suscripción falla en el inicio, FCM vuelve a intentarlo automáticamente. Cuando la suscripción no se puede completar, esta genera un error que puedes capturar en un controlador de finalización, como se muestra a continuación:
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"); }];
Esta llamada realiza una
solicitud asíncrona al backend de FCM y suscribe al cliente al
tema determinado. Antes de llamar a subscribeToTopic:topic
, asegúrate de que la
instancia de app cliente ya haya recibido un token de registro a través de la
devolución de llamada didReceiveRegistrationToken
.
Cada vez que la app se inicia,
FCM se asegura de que todos los temas solicitados estén suscritos. Para
anular la suscripción, llama a unsubscribeFromTopic:topic
,
y FCM la anulará en segundo plano.
C++
Para suscribirte a un tema, llama a ::firebase::messaging::Subscribe
desde tu aplicación. Esto genera una solicitud asíncrona en el backend de
FCM y suscribe al cliente a un tema determinado.
::firebase::messaging::Subscribe("example");
Si la solicitud de suscripción falla al inicio, FCM vuelve a intentarlo hasta que pueda suscribirse al tema correctamente. Cada vez que la app se inicia, FCM se asegura de que todos los temas solicitados estén suscritos.
Para anular la suscripción, llama a ::firebase::messaging::Unsubscribe
y FCM la anulará en segundo plano.
Unity
Para suscribirte a un tema, llama a Firebase.Messaging.FirebaseMessaging.Subscribe
desde tu aplicación. Esto genera una solicitud asíncrona en el backend de
FCM y suscribe al cliente a un tema determinado.
Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");
Si la solicitud de suscripción falla al inicio, FCM vuelve a intentarlo hasta que pueda suscribirse al tema correctamente. Cada vez que la app se inicia, FCM se asegura de que todos los temas solicitados estén suscritos.
Para anular la suscripción, llama a
Firebase.Messaging.FirebaseMessaging.Unsubscribe
y FCM la anulará en segundo plano.
Administración de temas heredada del servidor (obsoleta)
Para comprender qué son los IDs de instancia, visita la página de IDs de instancia. Si quieres obtener detalles sobre los extremos obsoletos, consulta las Referencias de la API de ID de instancia.