Usa la API de HTTP v1 de FCM con tokens de acceso de OAuth 2

1. Introducción

En comparación con la API heredada de FCM, la API de FCM HTTP v1 proporciona un modelo de autorización más seguro que usa tokens de acceso de corta duración. Los pasos para generar el token de acceso para la API de FCM v1 son significativamente diferentes de los pasos para la API heredada.

En este codelab, se explica el proceso de configuración del cliente y del servidor para habilitar el envío de notificaciones push a una app para Android con la API de FCM HTTP v1. Destaca el paso clave de la generación de credenciales para la API v1.

Puedes encontrar más información en los siguientes vínculos:

Requisitos previos

  • Conocimientos básicos sobre el desarrollo en Java y Android

Qué aprenderás

  • Pasos detallados de la configuración del cliente y del servidor para habilitar el envío de notificaciones push a tu app para Android con la API de FCM HTTP v1
  • Generación de credenciales para la API de HTTP v1 con cuentas de servicio
  • Envío de mensajes de prueba a través de la API de HTTP v1

Requisitos

La versión estable más reciente de Android Studio

Uno de los siguientes dispositivos:

Un entorno de desarrollo Java o un editor de código de tu elección

2. Configuración del proyecto de Firebase y la app para Android

Al final del codelab, podrás enviar mensajes a tu app con Firebase Cloud Messaging. Antes de hacerlo, deberás crear un proyecto de Firebase. Este codelab también proporciona una app para Android que contiene código de muestra para integrar con FCM.

Configuración del proyecto de Firebase

Configuración de la app para Android

La app de ejemplo para Android que se proporciona en este codelab ya está integrada con FCM. Después de iniciarse, se registrará en el servidor de FCM y se suscribirá a un tema. En los pasos posteriores de este codelab, enviarás un mensaje de tema al tema y tu app lo recibirá.

3. Configura el servidor de la app

Ahora que tu app está configurada, deberás descargar un ejemplo de código del servidor para enviar mensajes a tu app con la API de FCM v1. Este código carga las credenciales de la API (que se describen en la siguiente sección) para generar un token de acceso. Luego, envía un mensaje a tu app con la mensajería de temas de FCM.

  • Para importar el código del servidor inicial, descarga el proyecto de GitHub. El proyecto "messaging" es un proyecto Java basado en Gradle con una dependencia del SDK de firebase-admin, que proporciona funcionalidad para enviar mensajes.

Puedes encontrar más detalles sobre cómo debe funcionar un servidor de apps con FCM en el documento Tu entorno de servidor y FCM.

4. Obtén credenciales de la versión 1

La API de HTTP v1 de FCM usa tokens de acceso de corta duración según el modelo de seguridad OAuth2. En comparación con la clave de API estática que se usa en la API heredada de FCM, el token de acceso de corta duración es menos propenso al riesgo de filtración de credenciales. En esta sección, se detallan los pasos para crear una credencial que permita generar el token de acceso que se usa para llamar a la API.

  1. Configura una cuenta de servicio de Firebase para permitir que el SDK de Firebase Admin autorice llamadas a las APIs de FCM. Abre Configuración del proyecto en Firebase console y selecciona la pestaña Cuentas de servicio. Haz clic en Generar nueva clave privada para descargar el fragmento de configuración. Una captura de pantalla recortada en la que se destaca el fragmento de configuración del SDK de Admin del componente Cuentas de servicio de la página Configuración del proyecto
  2. En el proyecto de GitHub descargado, cambia el nombre del archivo descargado a service-account.json y cópialo en la ruta de acceso messaging/ del proyecto.
  3. El método getAccessToken() (que se muestra a continuación) en la clase Messaging.java genera un token de OAuth2 que es válido durante 1 hora.
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();
}
  1. Cambia el método principal para agregar la siguiente línea:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. Ve al directorio de mensajería o del proyecto en tu terminal y escribe lo siguiente:
./gradlew run -Pmessage=common-message

para imprimir el token de OAuth2.

Puedes encontrar más información en Autoriza solicitudes de envío.

5. Envía un mensaje con la API de REST

Ahora puedes enviar un mensaje a través de la API de HTTP v1. Siga los pasos que se indican a continuación:

  • Para agregar el token de acceso a un encabezado de solicitud HTTP:
  • Agrega el token como el valor del encabezado de autorización en el formato Authorization: Bearer <access_token>.
  • Realiza una solicitud HTTP a la API de FCM v1 con curl:
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d  "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send

El $topic_name anterior se puede encontrar en el código de la app para Android que se menciona en la configuración del proyecto de Firebase y la app para Android. De forma predeterminada, es "weather".

  • Después de que se entregue un mensaje correctamente, deberías ver una notificación emergente en la pantalla, similar a la imagen que se muestra a continuación:

54ae84ece22202cd.png

6. Conclusión

¡Felicitaciones! Completaste correctamente el codelab para hacer lo siguiente:

  • Configura un proyecto de Firebase:
  • Integra Firebase en una app para Android
  • Crea credenciales para la API de HTTP v1 de FCM
  • Envía un mensaje a tu app a través de la API de HTTP v1 de FCM

Para explorar las funciones avanzadas que ofrece FCM, las siguientes referencias son útiles: