Firebase Cloud Messaging (FCM) de Google es un servicio que permite enviar notificaciones push a aplicaciones móviles, aplicaciones web y otros dispositivos conectados.
FCM ofrece una API HTTP que permite enviar mensajes desde servidores backend hacia dispositivos cliente de forma segura y escalable.
Las notificaciones pueden enviarse utilizando tres tipos principales de destino.
Tipos de destino de notificaciones en FCM
1️⃣ Token de dispositivo (Device Token)
Permite enviar una notificación directamente a un dispositivo específico.
Cada instalación de una aplicación genera un token único proporcionado por FCM. Este token identifica la instancia de la aplicación en ese dispositivo.
El backend puede almacenar este token para enviar notificaciones personalizadas.
2️⃣ Tema (Topic)
Los topics permiten enviar notificaciones a múltiples dispositivos usando un modelo publisher–subscriber.
Los dispositivos se suscriben a un topic y cualquier mensaje enviado a ese topic será recibido por todos los dispositivos suscritos.
Ejemplo de topics:
news
promotions
weather_alerts
3️⃣ Condicional
Las notificaciones condicionales permiten definir expresiones lógicas para enviar mensajes a múltiples topics.
Ejemplo:
'news' in topics && 'mexico' in topics
Esto enviará la notificación únicamente a dispositivos suscritos a ambos topics.
Autenticación con Firebase Cloud Messaging
Para enviar notificaciones usando la API HTTP v1 es necesario autenticarse usando OAuth2 mediante una cuenta de servicio de Google.
Crear la cuenta de servicio
- Ir a Firebase Console
- Abrir Project Settings
- Seleccionar Service Accounts
- Generar una nueva clave privada
- Descargar el archivo:
serviceAccount.json
Este archivo contiene las credenciales necesarias para autenticarse contra la API de FCM.
Obtener un Access Token usando Google CLI
Una forma sencilla de probar las notificaciones es obtener un Access Token temporal con la CLI de Google.
Activar la cuenta de servicio:
gcloud auth activate-service-account --key-file="tu-service-account.json"
Obtener el access token:
gcloud auth print-access-token
Este token se utiliza en las peticiones HTTP como un Bearer Token.
Enviar una notificación con curl o Postman
Ejemplo de petición usando curl:
curl --location --globoff 'https://fcm.googleapis.com/v1/projects/{{project_id}}/messages:send' \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
"message": {
"token": "{{device_token}}",
"notification": {
"title": "Prueba desde Postman",
"body": "Prueba desde Postman"
},
"data": {
"accion": "test",
"id": "123"
},
"android": {
"priority": "HIGH"
},
"apns": {
"headers": {
"apns_priority": "10"
},
"payload": {
"aps": {
"sound": "default",
"contentAvailable": 1
}
}
}
}
}'
Campos importantes:
| Campo | Descripción |
|---|---|
| notification | Información visible de la notificación |
| data | Datos personalizados enviados a la aplicación |
| token | Token del dispositivo destino |
| topic | Topic de destino |
| android / apns | Configuración específica por plataforma |
Enviar notificaciones desde .NET Core
En aplicaciones .NET Core / .NET 8 / .NET 9 podemos utilizar la API HTTP v1 de FCM usando las librerías de autenticación de Google.
Paquetes NuGet necesarios
--Requerido
Google.Apis.Auth
--Opcionales, para un cliente de alto nivel
FirebaseAdmin
FirebaseAdmin.Messaging
También se puede usar directamente HttpClient, como en el siguiente ejemplo.
Ejemplo: aplicación de consola en .NET
// Program.cs (.NET 8/9)using Google.Apis.Auth.OAuth2;
using System.Net.Http.Headers;
using System.Net.Http.Json;// Configuración
const string projectId = "TU_PROJECT_ID";
const string deviceToken = "TU_DEVICE_TOKEN";
const string topic = "news";// Obtener credenciales desde GOOGLE_APPLICATION_CREDENTIALS
GoogleCredential credential = await GoogleCredential
.GetApplicationDefaultAsync();credential = credential.CreateScoped(
"https://www.googleapis.com/auth/cloud-platform");// Obtener access token
var accessToken = await credential
.UnderlyingCredential
.GetAccessTokenForRequestAsync();using var http = new HttpClient();http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);var url = $"https://fcm.googleapis.com/v1/projects/{projectId}/messages:send";// Ejemplo 1: enviar a un device token
var payloadToToken = new
{
message = new
{
token = deviceToken,
notification = new
{
title = "Hola desde .NET",
body = "Este es un mensaje de prueba vía FCM"
},
data = new
{
accion = "abrir_detalle",
id = "12345"
},
android = new
{
priority = "HIGH"
}
}
};// Ejemplo 2: enviar a un topic
var payloadToTopic = new
{
message = new
{
topic = topic,
notification = new
{
title = "Noticia",
body = "Nueva actualización disponible"
},
data = new
{
tipo = "update",
version = "2.0"
}
}
};// Elegir payload
var body = payloadToToken;var response = await http.PostAsJsonAsync(url, body);var responseText = await response.Content.ReadAsStringAsync();Console.WriteLine($"Status: {response.StatusCode}");
Console.WriteLine(responseText);
Ejecutar la aplicación
Primero configura la variable de entorno con el archivo de credenciales.
Windows
set GOOGLE_APPLICATION_CREDENTIALS=C:\ruta\clave.json
Linux / macOS
export GOOGLE_APPLICATION_CREDENTIALS=/ruta/clave.json
Luego ejecuta la aplicación:
dotnet run
Si todo está configurado correctamente, FCM devolverá una respuesta similar a:
{
"name":"projects/mi-proyecto/messages/0:1700000000000000%abcdef"
}
Esto indica que el mensaje fue aceptado por Firebase.
Conclusión
Firebase Cloud Messaging permite implementar fácilmente un sistema de notificaciones push escalable para aplicaciones móviles y web.
Utilizando la API HTTP v1 y OAuth2, es posible enviar notificaciones desde cualquier backend, incluyendo aplicaciones desarrolladas con .NET Core.
Esta integración es especialmente útil para:
- Notificaciones en tiempo real
- Alertas del sistema
- Mensajes promocionales
- Actualizaciones de aplicaciones
