Firebase Cloud Messaging: qué es, principio de funcionamiento y notificaciones push

Autor: IT Sectr Publicado: 2026-04-29 Tiempo de lectura: 9 min

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

  • FCM — un servicio gratuito de notificaciones push de Google compatible con Android, iOS y Web a través de una API unificada y Firebase Console.
  • Tipos de mensajes — los mensajes de notificación se muestran automáticamente por el sistema; los mensajes de datos permiten enviar JSON arbitrario y procesarlo en la aplicación.
  • Tokens de dispositivo — cada aplicación recibe un Registration Token único que el servidor utiliza para el envío dirigido de notificaciones push.
  • Prioridades de entrega — las prioridades normal y alta determinan el comportamiento del sistema durante el ahorro de energía: los mensajes high activan el dispositivo desde el modo Doze.
  • Temas y grupos — FCM admite suscripciones a temas para envíos masivos y Device Groups para enviar a varios dispositivos de un mismo usuario.

Qué es Firebase Cloud Messaging

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.

Capacidades clave de FCM

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.

Ventajas sobre una solución propia

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.

Cómo funciona Firebase Cloud Messaging

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.

Registro del dispositivo y obtención del token

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.

Ciclo de vida del mensaje

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.

Tipos de mensajes en FCM

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.

Mensajes de notificación

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.

Mensajes de datos

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.

Mensajes combinados

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.

TipoAuto-visualizaciónProcesamiento en segundo planoEjemplo
NotificationSí, por el sistemaAutomático, sin códigoNotificación push de bienvenida
DataNoMediante callback de la aplicaciónSincronización de datos en segundo plano
CombinadoSí, parte de notificaciónParte de datos al abrirNotificación + enlace al pedido

Configuración de FCM en Android

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.

Inicialización y obtención del token

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.

kotlin
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)
    }
}

Registro del servicio en el manifiesto

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.

xml
<!-- 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>

Configuración de FCM en iOS

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.

Configuración de APNs y registro de notificaciones

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.

swift
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
    }
}

Gestión de notificaciones entrantes

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.

Envío de mensajes desde el servidor

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.

Formato de solicitud HTTP v1

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.

js
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)
    })

Temas y envío masivo

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

¿Cuál es la diferencia entre FCM y APNs?

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.

¿Se pueden enviar mensajes FCM sin servidor?

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.

¿Qué hacer si cambia el token del dispositivo?

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.

¿Cómo gestiona FCM los dispositivos sin conexión?

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.

¿Cuánto cuesta usar Firebase Cloud Messaging?

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

  • Firebase Cloud Messaging es un servicio multiplataforma de notificaciones push de Google compatible con Android, iOS, Web y Unity a través de una API unificada.
  • La arquitectura de FCM consta del servidor del proveedor, la infraestructura de Firebase y la aplicación cliente, garantizando una entrega confiable de mensajes a través de la red global de Google.
  • Tres tipos de mensajes — notificación (visualización automática), datos (payload arbitrario sin UI) y combinados (ambos tipos en un mensaje).
  • FCM en Android funciona mediante FirebaseMessagingService con conexión propia, mientras que en iOS utiliza APNs como transporte con intercepción de token a través de MessagingDelegate.
  • La API HTTP v1 se recomienda para envío desde servidor con autenticación OAuth 2.0 mediante Service Account y soporte de análisis de entrega.
  • Los temas permiten enviar mensajes a grupos de suscriptores, y las condiciones permiten combinar múltiples temas para una segmentación precisa.
  • FCM es gratuito sin límite de mensajes, con almacenamiento de mensajes sin conexión hasta 28 días y un tamaño máximo de payload de 4 KB.

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.

Discutir el proyecto

Lea también