Con la API de HTTP v1 de FCM, puedes compilar solicitudes de mensajes y enviarlas a estos tipos de destinos:
- Nombre del tema
- Condición
- Token de registro del dispositivo
- Nombre del grupo de dispositivos (solo protocolo)
Puedes enviar mensajes con una carga útil de notificación compuesta por campos predefinidos, una carga útil de datos de tus propios campos definidos por el usuario o un mensaje que contenga ambas cargas útiles. Consulta Tipos de mensajes para obtener más información.
Autoriza solicitudes de envío HTTP v1
Según los detalles de tu entorno de servidor, usa una combinación de las siguientes estrategias para autorizar las solicitudes de servidor a los servicios de Firebase:
- Credenciales predeterminadas de la aplicación (ADC) de Google
- Un archivo JSON de una cuenta de servicio
- Un token de acceso de OAuth 2.0 de corta duración de una cuenta de servicio
Si la aplicación se ejecuta en Compute Engine, Google Kubernetes Engine, App Engine o Cloud Functions (incluido Cloud Functions for Firebase), usa el servicio de credenciales predeterminadas de la aplicación (ADC). ADC usa tu cuenta de servicio predeterminada existente para obtener credenciales y autorizar solicitudes. Además, permite realizar pruebas locales flexibles a través de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS. Si deseas lograr la automatización más completa del flujo de autorización, usa ADC y las bibliotecas de servidor del SDK de Admin.
Si la aplicación se ejecuta en un entorno de servidor que no es de Google, deberás descargar un archivo JSON de una cuenta de servicio desde el proyecto de Firebase. Puedes usar la variable de entorno GOOGLE_APPLICATION_CREDENTIALS para autorizar solicitudes con las credenciales que obtuviste de forma manual, siempre y cuando tengas acceso a un sistema de archivos que contenga el archivo de claves privadas. De lo contrario, debes hacer referencia al archivo de la cuenta de servicio en el código. Este proceso se debe realizar con mucho cuidado para evitar exponer tus credenciales.
Proporciona credenciales con ADC
El servicio de credenciales predeterminadas de la aplicación (ADC) de Google revisa tus credenciales en el siguiente orden:
ADC verifica si se configuró la variable de entorno GOOGLE_APPLICATION_CREDENTIALS. Si está configurada, ADC usa el archivo de cuenta de servicio al que hace referencia la variable.
Si no se configuró la variable de entorno, ADC usa la cuenta de servicio predeterminada que Compute Engine, Google Kubernetes Engine, App Engine y Cloud Functions proporcionan para las aplicaciones que se ejecutan en esos servicios.
Si ADC no puede usar ninguna de las credenciales mencionadas, el sistema arrojará un error.
En el siguiente ejemplo de código del SDK de Admin, se muestra esta estrategia, pero no se especifican las credenciales de la aplicación de forma explícita. Sin embargo, ADC puede encontrar las credenciales de forma implícita siempre que la variable de entorno esté configurada o que la aplicación se ejecute en Compute Engine, Google Kubernetes Engine, App Engine o Cloud Functions.
Node.js
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
Java
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
Python
default_app = firebase_admin.initialize_app()
Go
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
C#
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.GetApplicationDefault(),
});
Proporciona credenciales de forma manual
Los proyectos de Firebase son compatibles con las cuentas de servicio de Google, por lo que puedes llamar a las APIs del servidor de Firebase desde tu servidor de apps o un entorno de confianza. Si desarrollas código o implementas tu aplicación de manera local, puedes usar las credenciales obtenidas mediante la cuenta de servicio para autorizar las solicitudes del servidor.
Para autenticar una cuenta de servicio y autorizar su acceso a los servicios de Firebase, debes generar un archivo de claves privadas en formato JSON.
Sigue estos pasos a fin de generar un archivo de claves privadas para la cuenta de servicio:
En la consola de Firebase, abre Configuración > Cuentas de servicio.
Haz clic en Generar nueva clave privada y luego en Generar clave para confirmar.
Almacena de forma segura el archivo JSON que contiene la clave.
Cuando autorices mediante una cuenta de servicio, tienes dos opciones para proporcionar las credenciales a la aplicación. Puedes configurar la variable de entorno GOOGLE_APPLICATION_CREDENTIALS o pasar la ruta a la clave de la cuenta de servicio en el código de forma explícita. Recomendamos enfáticamente que uses la primera opción, ya que es más segura.
Para configurar la variable de entorno, haz lo siguiente:
Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS con la ruta del archivo JSON que contiene la clave de tu cuenta de servicio. Esta variable solo se aplica a la sesión actual de Cloud Shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.
Linux o macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
Con PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
Cuando completes los pasos anteriores, el servicio de credenciales predeterminadas de la aplicación (ADC) puede determinar de forma implícita tus credenciales, lo que te permite usar credenciales de cuentas de servicio cuando realizas pruebas o ejecutas aplicaciones en entornos de terceros.
Usa credenciales para crear tokens de acceso
A menos que uses Firebase Admin SDK, que controla la autorización automáticamente, deberás crear el token de acceso y agregarlo para enviar solicitudes.
Para recuperar el token de acceso de OAuth 2.0 de corta duración, usa las credenciales de Firebase y la biblioteca cliente de Google Auth en tu lenguaje preferido, como se muestra a continuación:
Node.js
function getAccessToken() {
return new Promise(function(resolve, reject) {
const key = require('../placeholders/service-account.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
En este ejemplo, la biblioteca cliente de la API de Google autentica la solicitud con un token web JSON o JWT. Para obtener más información, consulta la sección sobre los tokens web JSON.
Python
def _get_access_token():
"""Retrieve a valid access token that can be used to authorize requests.
:return: Access token.
"""
credentials = service_account.Credentials.from_service_account_file(
'service-account.json', scopes=SCOPES)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
return credentials.token
Java
private static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refresh();
return googleCredentials.getAccessToken().getTokenValue();
}
Cuando venza el token de acceso, se llamará al método de actualización automáticamente para obtener un token actualizado.
Para autorizar el acceso a FCM, solicita el permiso
https://www.googleapis.com/auth/firebase.messaging
.
Para agregar el token de acceso a un encabezado de solicitud HTTP, haz lo siguiente:
Agrega el token como el valor del encabezado Authorization
en el formato Authorization: Bearer <access_token>
:
node.js
headers: {
'Authorization': 'Bearer ' + accessToken
}
Python
headers = {
'Authorization': 'Bearer ' + _get_access_token(),
'Content-Type': 'application/json; UTF-8',
}
Java
URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getServiceAccountAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;
Autoriza con una cuenta de servicio de otro proyecto
Puedes enviar mensajes para un proyecto (el "proyecto de destino") mientras usas un token de OAuth 2.0 generado a partir de una cuenta de servicio en un proyecto diferente (el "proyecto de remitente"). Esto te permite centralizar la administración de la cuenta de servicio en un proyecto mientras envías mensajes en nombre de otros. Para aprender a hacerlo, sigue estos pasos:
- Habilita la API: Asegúrate de que la API de Firebase Cloud Messaging esté habilitada en el proyecto del remitente.
- Crea una cuenta de servicio: Crea una cuenta de servicio en el proyecto del remitente.
- Otorga permisos: En el proyecto de destino, otorga a la dirección de correo electrónico de la cuenta de servicio el rol de administrador de la API de Firebase Cloud Messaging en la página de IAM. Esto permite que la cuenta de servicio del otro proyecto envíe mensajes al proyecto de destino.
- Obtén un token: Genera un token de acceso de OAuth 2.0 para la cuenta de servicio en el proyecto del remitente. Para ello, puedes hacer lo siguiente:
- Descarga y usa el archivo de claves JSON de la cuenta de servicio.
- También puedes usar Workload Identity si tu servicio se ejecuta en Google Cloud.
- Envía la solicitud: Usa el token de acceso obtenido en el encabezado
Authorization
de tu solicitud de envío. La solicitud se debe realizar al extremo HTTP v1 del proyecto de destino:POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send
Envía mensajes a dispositivos específicos
Para enviar mensajes a un dispositivo específico, pasa su token de registro como en los siguientes ejemplos.
REST
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"body":"This is an FCM notification message!",
"title":"FCM Message"
}
}
}
Comando de cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
"notification":{
"title":"FCM Message",
"body":"This is an FCM Message"
},
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Si la operación se realiza correctamente, la respuesta de la API de HTTP v1 es un objeto JSON que contiene el ID del mensaje:
{
"name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
}
Envía un mensaje de notificación de prueba con la API de HTTP v1 de FCM
En esta sección, se describe cómo enviar un mensaje de notificación de prueba con la API de HTTP v1 de FCM.
URL de la solicitud HTTP
La solicitud consiste en una solicitud HTTP POST al destino especificado (un token de registro, un tema o una condición) en la siguiente URL:
POST https://fcm.googleapis.com/v1/projectId/messages:send
Ejemplo completo de JSON de solicitud HTTP
A continuación, se muestra un ejemplo completo de cómo publicar una notificación en una solicitud HTTP POST:
{ "message": { "token": REGISTRATION_TOKEN, "notification": { "title": "FCM API test", "body": "This is the body of the notification.", "image": "https://cat.10515.net/1.jpg" } } }
Haz clic en Ejecutar para probar la muestra en el Explorador de APIs.