Firebase Cloud Messaging (FCM) es un servicio multiplataforma de entrega de notificaciones push y mensajes de Google, diseñado para aplicaciones móviles y web. FCM garantiza una transferencia confiable de datos entre el servidor y los dispositivos cliente sin necesidad de mantener una conexión de red permanente. Según Firebase Documentation, 2026, a través de la infraestructura de FCM pasan diariamente más de 300 mil millones de mensajes en todo el mundo. El servicio admite tanto notificaciones con visualización automática como mensajes de datos para transferencia oculta en segundo plano.
Puntos clave
Firebase Cloud Messaging es un servicio en la nube de Google que garantiza la entrega de notificaciones push y mensajes de datos entre el servidor de la aplicación y los dispositivos cliente. El servicio reemplazó al antiguo Google Cloud Messaging (GCM) y se convirtió en la solución estándar para la entrega de push en el ecosistema de Firebase. FCM es compatible con Android, iOS, Web y Unity, proporcionando una interfaz de envío unificada independientemente de la plataforma de destino.
El servicio ofrece varios mecanismos de entrega de mensajes, cada uno diseñado para una tarea específica. Los mensajes de notificación los muestra el sistema automáticamente al recibirlos — el desarrollador no necesita escribir código para mostrar la notificación. Los mensajes de datos transmiten un payload arbitrario en forma de pares clave-valor y se procesan dentro de la aplicación. Los mensajes combinados contienen partes visibles y ocultas para máxima flexibilidad.
Implementar un servidor push propio requiere mantener una conexión TCP constante con cada dispositivo, lo que es ineficiente e inseguro. FCM utiliza la infraestructura unificada de Google que mantiene conexiones con miles de millones de dispositivos simultáneamente. El servicio gestiona automáticamente los reintentos de entrega, las colas de mensajes y el balanceo de carga, liberando al desarrollador de resolver estas tareas por sí mismo.
La arquitectura de FCM consta de tres componentes clave: el servidor del proveedor (tu backend), el servidor de Firebase Cloud Messaging y la aplicación cliente en el dispositivo. Cuando el servidor envía un mensaje, primero llega a la infraestructura de FCM, que lo enruta al dispositivo de destino. Si el dispositivo está desconectado, FCM almacena el mensaje en una cola y lo entrega cuando se restablece la conexión.
En el primer inicio, la aplicación llama al SDK de Firebase, que registra el dispositivo en el servicio FCM y recibe un Registration Token único. Este token es una cadena de unos 150 caracteres que identifica una instancia específica de la aplicación en un dispositivo concreto. El token puede cambiar al reinstalar la aplicación, borrar los datos o restaurar desde una copia de seguridad — el desarrollador debe manejar la actualización del token mediante el delegado onNewToken.
Cuando el servidor envía una solicitud a través de la API de FCM, el mensaje pasa por varias etapas. Recepción y validación — FCM verifica la corrección de la solicitud y la existencia del dispositivo de destino. Cola — si el dispositivo no está disponible, el mensaje entra en una cola de almacenamiento. Enrutamiento — FCM determina el canal de entrega óptimo (WiFi o datos móviles). Entrega — el sistema transmite el mensaje a la aplicación de destino. Tras la entrega exitosa, FCM devuelve un identificador de mensaje al servidor.
Firebase Cloud Messaging admite tres tipos de mensajes, cada uno con sus particularidades de procesamiento en el lado del cliente. Los mensajes de notificación son gestionados por el servicio del sistema Google Play Services en Android y APNs en iOS, y se muestran automáticamente como banners push. Los mensajes de datos se entregan directamente a la aplicación y se procesan mediante el callback onMessageReceived en Android y application(_:didReceiveRemoteNotification:) en iOS.
Un mensaje de notificación contiene campos predefinidos: title, body, URL de imagen y sonido de notificación. El sistema crea y muestra automáticamente la notificación en la bandeja del sistema, incluso si la aplicación está en segundo plano o cerrada. El usuario ve un banner estándar con título y texto, y al hacer clic, la aplicación se abre con los datos del payload. Si la aplicación está activa, el mensaje de notificación se puede interceptar y procesar en código.
Un mensaje de datos es un conjunto personalizado de pares clave-valor sin campos predefinidos. El payload no es procesado por el sistema automáticamente — la aplicación recibe los datos en bruto y puede interpretarlos de forma arbitraria. Los mensajes de datos se utilizan para sincronización en segundo plano, actualización de caché local, activación de sincronización o envío de comandos sin mostrar una notificación. En Android, el mensaje de datos se entrega siempre, incluso si la aplicación está cerrada o en segundo plano.
FCM permite enviar un mensaje que contiene tanto una parte de notificación (para visualización) como una parte de datos (para procesamiento). El payload combinado incluye tanto los campos predefinidos de notificación como las claves arbitrarias de datos. El sistema muestra la notificación de la parte de notificación, y la parte de datos se transmite en los extras del intent de la aplicación al abrirse. Esto es útil para escenarios donde se necesita mostrar una notificación al usuario y, al mismo tiempo, pasar contexto para navegar a una pantalla concreta.
| Tipo | Auto-visualización | Procesamiento en segundo plano | Ejemplo |
|---|---|---|---|
| Notification | Sí, por el sistema | Automático, sin código | Notificación push de bienvenida |
| Data | No | Mediante callback de la aplicación | Sincronización de datos en segundo plano |
| Combinado | Sí, parte de notificación | Parte de datos al abrir | Notificación + enlace al pedido |
La integración de FCM en Android comienza conectando el SDK de Firebase a través del archivo build.gradle a nivel de aplicación. Después de añadir las dependencias y el archivo google-services.json, la aplicación recibe automáticamente un Registration Token, que se transmite mediante el callback de FirebaseMessagingService. Para recibir notificaciones, es necesario crear un servicio que herede de FirebaseMessagingService y registrarlo en AndroidManifest.xml.
Después de conectar el SDK de Firebase, el token del dispositivo se genera automáticamente sin código adicional. El token está disponible mediante FirebaseMessaging.getInstance().token, que devuelve un Task<String>. Para rastrear las actualizaciones del token, se sobrescribe el método onNewToken en el servicio. El token debe enviarse al servidor del proveedor para que pueda enviar notificaciones push a este dispositivo.
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Nuevo mensaje"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
El servicio para recibir mensajes FCM debe registrarse en AndroidManifest.xml con los intent-filter correspondientes. Añadir la etiqueta service con el permiso INTERNET y la acción especificada. Sin el registro del servicio, los mensajes no se entregarán a la aplicación en segundo plano. Para mostrar notificaciones en Android 13+ se requiere el permiso en tiempo de ejecución POST_NOTIFICATIONS.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
La integración de FCM en iOS requiere configuración tanto en Apple Push Notification Service (APNs) como en Firebase Console. A diferencia de Android, donde FCM gestiona la conexión directamente, en iOS FCM utiliza APNs como capa de transporte. La aplicación se registra para recibir notificaciones push mediante UIApplication.shared.registerForRemoteNotifications, y el SDK de Firebase intercepta el token de dispositivo recibido y lo vincula con el Registration Token de FCM.
Para que FCM funcione en iOS, es necesario cargar una clave o certificado APNs en Firebase Console. La clave APNs es un método de autenticación moderno sin certificados (recomendado por Apple). La clave se crea en Apple Developer Portal en la sección Keys y se carga en la configuración de Cloud Messaging en Firebase Console. Después de configurar APNs, la aplicación solicita permiso para notificaciones mediante UNUserNotificationCenter y se registra a través de APNs.
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
Para gestionar las notificaciones recibidas, se implementa el delegado UNUserNotificationCenter. El método willPresent se llama cuando se recibe una notificación con la aplicación activa — aquí se puede mostrar una notificación personalizada dentro de la aplicación o ignorar el banner del sistema. El método didReceive se llama cuando el usuario pulsa la notificación — aquí se navega a la pantalla correspondiente. Para mensajes de datos se utiliza el delegado MessagingDelegate, que recibe el payload al recibir un mensaje FCM en segundo plano.
El envío desde el servidor de mensajes FCM se realiza a través de la API HTTP v1 de Firebase Cloud Messaging o la API heredada de Firebase Cloud Messaging. La API HTTP v1 es el método recomendado, utiliza autenticación OAuth 2.0 mediante Service Account y admite todas las capacidades modernas de FCM, incluyendo análisis de entrega y pruebas A/B de notificaciones. La solicitud se envía por el método POST al endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
El cuerpo de la solicitud contiene un objeto JSON con la información del mensaje: target (token, tema o condición), notification (para visualización) y data (payload personalizado). La autenticación se realiza mediante una clave JSON de Service Account cargada en las variables de entorno del servidor. El token de acceso se genera con la librería google-auth-library. Google recomienda usar Firebase Admin SDK para la gestión automática de autenticación y reintentos.
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "20% de descuento", body: "En todos los servicios hoy" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Enviado correctamente:", response)
})
.catch(error => {
console.log("Error de envío:", error)
})
Para enviar notificaciones a un grupo de usuarios, FCM admite suscripciones a temas. Un tema (topic) es un canal con nombre al que la aplicación cliente se suscribe mediante FirebaseMessaging.getInstance().subscribeToTopic(). El servidor puede enviar un mensaje a un tema y se entregará a todos los dispositivos suscritos. Los temas son adecuados para newsletters, notificaciones promocionales y push basados en eventos. Para una segmentación más precisa, se utilizan condiciones basadas en múltiples temas con operadores lógicos.
Preguntas frecuentes
FCM funciona en Android a través de su propia infraestructura de Google, mientras que en iOS utiliza APNs como protocolo de transporte. FCM proporciona una API unificada para ambas plataformas, almacenamiento automático de mensajes sin conexión y análisis de entrega, que no están disponibles en APNs puro.
Sí, a través de Firebase Console en la sección Cloud Messaging se pueden enviar notificaciones manualmente a dispositivos, temas o segmentos de audiencia seleccionados. Esta función es adecuada para pruebas y envíos puntuales, pero no sustituye la integración con servidor para aplicaciones en producción.
Suscríbete a las actualizaciones del token mediante onNewToken en FirebaseMessagingService (Android) o MessagingDelegate (iOS). Cuando cambie el token, envía el nuevo token al servidor y elimina el antiguo. El servidor debe actualizar la base de datos y dejar de intentar enviar al token obsoleto.
FCM almacena el mensaje en una cola hasta 28 días y lo entrega cuando se restablece la conexión. Para los mensajes de notificación, solo se colapsa el último mensaje de cada grupo de colapso. Los mensajes de datos se almacenan por separado y se entregan en orden de envío sin colapso.
FCM es completamente gratuito sin límites en la cantidad de mensajes. El uso de FCM no se cobra ni en el plan Spark ni en el plan Blaze. Solo hay límites en el tamaño del payload: hasta 4 KB para mensajes de notificación y hasta 2 KB para mensajes de datos.
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