FCM (Firebase Cloud Messaging) es un servicio multiplataforma de Google para enviar notificaciones push y transferir datos entre un servidor y aplicaciones móviles. Soporta Android, iOS y plataformas web a través de una API unificada. Según la Documentación de Firebase, FCM procesa más de mil millones de mensajes diariamente en todo el mundo.
Puntos clave
Firebase Cloud Messaging (FCM) es un servicio en la nube de Google que garantiza la entrega confiable de notificaciones push y mensajes de datos a dispositivos móviles. Anteriormente conocido como Google Cloud Messaging (GCM), FCM se ha convertido en la herramienta principal para notificaciones multiplataforma en el ecosistema de Firebase.
FCM selecciona automáticamente el canal de entrega óptimo según la plataforma: en Android utiliza su propia conexión FCM; en iOS utiliza APNS (a través de la puerta de enlace de FCM). El desarrollador no necesita implementar dos integraciones diferentes — FCM se encarga del enrutamiento.
El servicio proporciona una API REST unificada y un Admin SDK para enviar mensajes. Esto permite enviar notificaciones desde el lado del servidor sin estar vinculado a una plataforma de destinatario específica.
FCM soporta varios modos de entrega: un mensaje único a un dispositivo específico, transmisión grupal por tema y envío segmentado por condiciones. También están disponibles el envío programado y las pruebas A/B del contenido de las notificaciones.
La arquitectura de FCM se basa en tres componentes: la aplicación cliente, el Firebase Connection Server y el servidor de aplicaciones. El cliente se registra en FCM al iniciarse y recibe un token de registro único — una cadena que identifica el dispositivo para la aplicación dada.
El servidor de aplicaciones envía una solicitud a la API REST de FCM, especificando el token del destinatario o el tema. El Firebase Connection Server entrega el mensaje utilizando una conexión XMPP persistente o una solicitud HTTP. Si el dispositivo está fuera de línea, el mensaje se pone en cola y se entrega cuando se restablece la conexión.
FCM garantiza la entrega mediante colas prioritarias y un mecanismo de confirmación. En Android, el mensaje se almacena hasta 28 días en la cola; en iOS, hasta 4 semanas (a través de APNS). Después de la fecha de vencimiento, el mensaje se elimina sin notificación.
El token de registro puede cambiar en varios casos: al restaurar datos de la aplicación, al actualizar a una nueva versión o al limpiar la caché. La aplicación debe implementar FirebaseMessagingService.onNewToken para manejar las actualizaciones del token y sincronizar con el servidor.
FCM soporta dos tipos de carga útil: notification y data. Cada tipo determina cómo y cuándo se procesa el mensaje en el dispositivo del destinatario.
| Parámetro | Notification | Data |
|---|---|---|
| Visualización automática | Sí, si la app está en segundo plano | No, solo en la app |
| Procesamiento | Sistema/NOS — en segundo plano; app — en primer plano | Siempre en la app (onMessageReceived) |
| Tamaño máximo | 4 KB | 4 KB |
| Claves personalizadas | Limitado a campos predefinidos | Cualquier par clave-valor |
| Requiere CollapseKey | Opcional | Opcional para agrupación |
En la práctica, se recomienda utilizar mensajes data cuando la aplicación necesita procesamiento completo de la notificación en onMessageReceived. Los mensajes notification son adecuados para escenarios simples donde la visualización del sistema es suficiente.
FCM y APNS son los dos servicios principales de entrega push. FCM funciona como una puerta de enlace multiplataforma, mientras que APNS es solo para el ecosistema de Apple. Sus diferencias clave radican en la arquitectura, los requisitos de certificados y los mecanismos de enrutamiento.
La elección entre FCM y APNS directo depende de la arquitectura del proyecto. Para aplicaciones multiplataforma, FCM es la opción óptima. Para proyectos solo iOS, es aceptable trabajar directamente con APNS a través de la API HTTP/2.
FCM está justificado cuando el proyecto utiliza Android e iOS simultáneamente, así como cuando se necesitan análisis de Firebase, pruebas A/B de notificaciones o temas sin lógica de servidor. APNS directo es preferible para aplicaciones solo iOS con dependencias mínimas y requisitos estrictos de latencia de entrega.
Para conectar FCM a una aplicación Android, es necesario agregar el SDK de Firebase y configurar google-services.json en la raíz del proyecto. Después del registro del token, la aplicación está lista para recibir mensajes a través de FirebaseMessagingService.
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
Después de la configuración, la aplicación recibe automáticamente un token FCM en el primer inicio. El token debe enviarse al servidor de la aplicación para el envío posterior de notificaciones a este dispositivo.
En Android 8+, antes de enviar una notificación FCM con visualización automática, se debe crear un NotificationChannel. Los mensajes notification de FCM utilizan el ID de canal predeterminado, pero se recomienda crear un canal personalizado a través de FirebaseMessagingService al recibir el primer mensaje. Los mensajes data no requieren un canal — la aplicación decide por sí misma cómo y cuándo mostrar la notificación.
En iOS, FCM actúa como intermediario entre el servidor de la aplicación y APNS. Firebase recibe el mensaje del servidor, lo envuelve en formato APNS y lo envía a través de la puerta de enlace de Apple. El desarrollador debe configurar una clave o certificado APNS en la consola de Firebase.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
En iOS, el registro en APNS ocurre de forma asíncrona. El SDK de FCM obtiene automáticamente el token APNS y lo pasa al servidor de Firebase. didReceiveRegistrationToken se activa al recibir un nuevo token FCM, que combina el token APNS con el identificador del proyecto.
FCM proporciona una consola de Firebase para monitorear la entrega: la cantidad de notificaciones enviadas, recibidas y mostradas. También está disponible una devolución de llamada de estado a través de Firebase Cloud Functions para rastrear errores de entrega en el lado del servidor. Métricas clave: impresiones y aperturas de notificaciones.
Al trabajar con FCM, es importante elegir el tipo de mensaje correcto para cada escenario. Para notificaciones simples con visualización automática, use mensajes notification. Para casos donde la aplicación necesita procesar datos antes de mostrar, use mensajes data. Un tipo mixto (notification + data) se recomienda solo si los datos son necesarios para análisis y no para cambiar el contenido de la notificación.
Gestione los tokens de forma centralizada. Almacene los tokens actuales en el servidor en una tabla vinculada al usuario y la plataforma. Implemente un mecanismo de limpieza de tokens obsoletos: cuando encuentre un error NotRegistered o InvalidRegistration, elimine el token de la base de datos. Los tokens rara vez cambian, pero su limpieza es un elemento obligatorio del soporte de FCM.
Utilice claves de colapso (collapseKey) para agrupar mensajes. Si está enviando múltiples notificaciones del mismo tipo (por ejemplo, "actualización del tipo de cambio"), establezca el mismo collapseKey. FCM entregará solo el último mensaje del grupo, reduciendo la carga del dispositivo y evitando la sobrecarga de notificaciones para el usuario.
Monitoree la entrega a través de Firebase Console y Cloud Functions. Los análisis de FCM muestran la cantidad de notificaciones enviadas, recibidas y mostradas. Si la tasa de visualización es inferior al 70%, verifique la configuración de los canales en Android y los permisos en iOS. La baja entrega a menudo está relacionada con canales deshabilitados o prohibiciones de notificaciones. Quinto: use las pruebas A/B de Firebase para optimizar el texto de las notificaciones y el momento de envío — esto aumenta la conversión de aperturas en un 15–25% según los datos de Firebase.
Preguntas frecuentes
FCM es la actualización evolutiva de GCM (Google Cloud Messaging). FCM ofrece una configuración simplificada a través de Firebase Console, análisis integrados, temas y soporte para Web Push. GCM fue descontinuado oficialmente en abril de 2019, y todos los proyectos deben migrar a FCM.
Firebase Cloud Messaging es un servicio gratuito sin límites en la cantidad de mensajes. El pago se aplica solo por el uso de otros servicios de Firebase como Cloud Functions o Firestore. FCM no requiere una suscripción Spark o Blaze para el envío básico de notificaciones.
El token de FCM cambia cuando: se restaura la aplicación desde una copia de seguridad, se borran los datos de la aplicación, se reinstala, se actualiza a una nueva versión con un Sender ID modificado. Siempre maneje onNewToken en FirebaseMessagingService para enviar el nuevo token al servidor.
FCM de Google está bloqueado en China. Para la entrega de notificaciones en China se utilizan servicios alternativos: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Para la entrega multiplataforma, se utilizan servicios multiproveedor como Getui.
Use la consola integrada de Firebase: seleccione "Cloud Messaging" — "Send Test Message". Ingrese un token de prueba y envíe un mensaje notification. La notificación debería aparecer en el dispositivo. También puede monitorear los registros de FirebaseMessagingService.onMessageReceived.
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