La Suscripción a Temas es un mecanismo de Firebase Cloud Messaging que permite agrupar dispositivos por intereses y enviar notificaciones a categorías enteras de suscriptores. En lugar de enviar a miles de Registration Token individuales, basta con enviar un mensaje a un tema. Según Firebase, 2025, la Suscripción a Temas se utiliza en aplicaciones de noticias, transmisiones deportivas y campañas de marketing para la entrega masiva de notificaciones.
Puntos Clave
La Suscripción a Temas es un mecanismo de entrega grupal de notificaciones push en el que los dispositivos se suscriben a canales con nombre (temas) y reciben mensajes enviados a esos canales. Cada tema se identifica por un nombre de cadena, como news_sports o weather_alerts.
Cuando un dispositivo se suscribe a un tema, FCM añade su Registration Token a la lista de destinatarios de ese tema. Al enviar un mensaje al tema, FCM enruta automáticamente una copia a cada dispositivo suscrito. Firebase no limita el número de suscripciones por dispositivo — una aplicación puede suscribir a un usuario a docenas de temas simultáneamente.
La principal ventaja de los temas es la escalabilidad. Para enviar una notificación a un millón de usuarios, solo se necesita una solicitud HTTP a FCM con el nombre del tema. Con el envío individual, se necesitarían un millón de solicitudes o un envío por lotes de hasta 500 tokens a la vez. Los temas también simplifican la lógica del servidor — no es necesario almacenar listas de tokens para cada categoría.
| Parámetro | Envío individual | Suscripción a Temas |
|---|---|---|
| Número de solicitudes | Una por token o lote hasta 500 | Una por tema |
| Gestión de suscripciones | En el servidor (lista de tokens) | En el cliente o servidor |
| Grupos dinámicos | Requieren actualización de lista | Automático mediante suscripción |
| Límite de destinatarios | Hasta 500 por solicitud | Ilimitado |
La Suscripción a Temas se utiliza ampliamente en aplicaciones de noticias para la categorización de contenido — suscribirse a los temas “Deportes”, “Política”, “Tecnología” permite enviar notificaciones relevantes. En el comercio electrónico, los temas se usan para notificaciones sobre descuentos en categorías específicas de productos. En mensajería y redes sociales, los temas se emplean para notificaciones de eventos en grupos.
Firebase impone restricciones al trabajar con temas. Una sola aplicación puede tener hasta 2000 temas. Cada dispositivo puede suscribirse a no más de 2000 temas. La frecuencia de operaciones de suscripción/cancelación también está limitada — no más de 3000 operaciones por minuto por proyecto. Superar estos límites resulta en un bloqueo temporal. Para proyectos con un gran número de temas, se recomienda usar condiciones en lugar de temas — FCM admite expresiones lógicas para la segmentación.
El proceso de Suscripción a Temas consta de tres etapas: inicialización de la suscripción en el cliente, registro en la infraestructura de FCM y confirmación de la operación. Tras una suscripción exitosa, el dispositivo comienza a recibir mensajes enviados a ese tema.
Cuando el cliente llama al método subscribeToTopic(), el SDK de Firebase envía una solicitud a los servidores de FCM. El servidor valida la operación y añade el token del dispositivo a la lista de suscriptores del tema. FCM devuelve al cliente una confirmación de suscripción exitosa. A partir de ese momento, todos los mensajes a este tema se entregarán al dispositivo.
No es necesario crear un tema previamente en la consola de Firebase. Cuando el primer dispositivo se suscribe a un tema con nombre news_promo, FCM lo crea automáticamente. Si el último dispositivo se da de baja, el tema permanece en el sistema pero inactivo, y se reanuda cuando se produce una nueva suscripción.
En Android, la suscripción y cancelación de temas se realiza a través del SDK de FirebaseMessaging. Los métodos subscribeToTopic() y unsubscribeFromTopic() aceptan el nombre del tema como parámetro. Las operaciones son asíncronas y requieren manejo de resultados.
Para suscribirse, simplemente llame a subscribeToTopic() con el nombre del tema objetivo. El SDK de Firebase gestiona las solicitudes de red y los reintentos automáticamente en caso de fallo. Se recomienda suscribirse a temas después de obtener exitosamente un Registration Token.
class TopicSubscriber(private val context: Context) {
fun subscribeToNewsTopic() {
FirebaseMessaging.getInstance()
.subscribeToTopic("news_latest")
.addOnCompleteListener { task ->
val msg = if (task.isSuccessful) {
"Subscribed to news topic"
} else {
"Subscription failed"
}
Log.d("FCM", msg)
}
}
fun unsubscribeFromNewsTopic() {
FirebaseMessaging.getInstance()
.unsubscribeFromTopic("news_latest")
.addOnCompleteListener { task ->
Log.d("FCM", "Sin suscripción: ${task.isSuccessful}")
}
}
}
En aplicaciones reales, un usuario puede suscribirse a varias categorías. Para una gestión cómoda, cree una clase gestora que sincronice el estado de las suscripciones con el servidor. Cuando un usuario inicie sesión, restaure sus suscripciones desde su perfil.
class SubscriptionManager(private val context: Context) {
private val fcm = FirebaseMessaging.getInstance()
suspend fun syncSubscriptions(topics: List<String>) {
topics.forEach { topic ->
fcm.subscribeToTopic(topic).await()
}
}
suspend fun removeAllSubscriptions() {
val savedTopics = getSavedTopics()
savedTopics.forEach { topic ->
fcm.unsubscribeFromTopic(topic).await()
}
}
private fun getSavedTopics(): List<String> {
return listOf("news_latest", "promotions", "updates")
}
}
En iOS, el proceso de suscripción a temas es idéntico al de Android en lógica, pero utiliza la API de Swift de Firebase Messaging. Los métodos subscribe y unsubscribe se llaman en la instancia de Messaging y también son asíncronos.
Para suscribirse a un tema en una aplicación iOS, use el método Messaging.subscribe(). Es importante llamar a la suscripción después de la inicialización de Firebase y la obtención del Registration Token. Apple recomienda solicitar permiso de notificaciones antes de suscribirse a temas.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Error de suscripción: \(error)")
} else {
Log.d("FCM", "Suscrito a \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Error al cancelar suscripción: \(error)")
}
}
}
}
En iOS, la suscripción a temas también está vinculada al Registration Token que Firebase recibe de APNs. Si el token de APNs cambia (por ejemplo, tras la restauración del dispositivo), Firebase transfiere automáticamente las suscripciones al nuevo token. Sin embargo, en casos excepcionales, puede ser necesario volver a suscribirse después de una actualización del Registration Token.
La gestión desde el servidor de suscripciones permite suscribir y cancelar dispositivos sin involucrar a la aplicación cliente. Esto es útil para administración, pruebas A/B y gestión de suscripciones desde el backend.
Firebase proporciona una API REST para la gestión masiva de suscripciones. El endpoint /v1/projects/{project_id}/subscriptions permite suscribir hasta 1000 dispositivos en una sola solicitud. La API utiliza los Registration Tokens de los dispositivos para la identificación.
const admin = require("firebase-admin")
async function subscribeUsersToTopic(tokens, topic) {
try {
const response = await admin
.messaging()
.subscribeToTopic(tokens, topic)
Log.info(`Success: ${response.successCount}`)
Log.info(`Failures: ${response.failureCount}`)
} catch (error) {
Log.error("Error de suscripción", error)
}
}
La gestión de suscripciones desde el servidor se utiliza en varios escenarios. Cuando un usuario se registra, el servidor lo suscribe automáticamente a temas básicos. Cuando las preferencias cambian en la versión web, el servidor sincroniza las suscripciones en el dispositivo móvil. Los administradores pueden suscribir dispositivos de prueba a temas internos para depuración. Para operaciones masivas, FCM proporciona el método Instance Group, que permite gestionar las suscripciones de un grupo de dispositivos mediante un identificador de grupo único.
Firebase no proporciona una API integrada para verificar las suscripciones actuales de un dispositivo. Se recomienda a los desarrolladores mantener su propia base de datos de suscripciones en el servidor. En cada inicio de la aplicación, el cliente sincroniza sus suscripciones con el servidor enviando la lista de temas activos. Esto ayuda a identificar la desincronización y restaurar las suscripciones si es necesario. Para auditoría, use los registros de Firebase Cloud Functions — cada operación de suscripción/cancelación puede registrarse.
Preguntas Frecuentes
El número máximo de temas es 2000 por aplicación. Si necesita más, considere usar Grupos de Dispositivos o envío individual por tokens.
Firebase no proporciona una API directa para obtener la lista de suscripciones de un dispositivo. Se recomienda a los desarrolladores almacenar el estado de las suscripciones en su propio servidor y sincronizarlo con el cliente.
FCM devuelve un resultado exitoso. Firebase maneja la cancelación de un tema inexistente como una operación no-op — no se generan errores y el estado no cambia.
Sí, en la consola de Firebase, en la sección Cloud Messaging, puede seleccionar un tema como público objetivo y enviar una notificación de prueba o producción a través de la interfaz web.
Normalmente, la suscripción se activa en cuestión de segundos. Sin embargo, en casos excepcionales, el retraso puede alcanzar los 30–60 segundos debido a la propagación entre los servidores de FCM.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también