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 HTTP v1 de FCM proporciona un modelo de autorización más seguro con tokens de acceso de corta duración. Los pasos para generar el token de acceso de la API de FCM v1 son muy diferentes de los pasos de la API heredada.

Este codelab te guiará en 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. Aquí se destaca el paso clave de la generación de credenciales para la API v1.

Puedes obtener más información en:

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 HTTP v1 de FCM
  • Generación de credenciales para la API de HTTP v1 con cuentas de servicio
  • Envía 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 de 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 integrarse a 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 en 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 apps

Ahora que tu app está configurada, deberás descargar una muestra 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 a través de la mensajería por temas de FCM.

  • Para importar el código del servidor de partida, descarga el proyecto de GitHub. El término “mensajería” El proyecto es un proyecto de Java basado en Gradle que depende del SDK de firebase-admin, que proporciona funcionalidad para enviar mensajes.

Para obtener más información sobre cómo debe funcionar un servidor de apps con FCM, consulta el documento Tu entorno de servidor y FCM.

4. Obtén credenciales de la v1

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 que debes seguir para crear una credencial para 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 API de FCM. Abre la Configuración del proyecto en Firebase console y selecciona la pestaña Cuentas de servicio. Haz clic en Generate new private key 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 de cuentas de servicio de la página de 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 válido por 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 por 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 la terminal y escribe lo siguiente:
./gradlew run -Pmessage=common-message

para imprimir el token de OAuth2.

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

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

Ya estás listo para 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

Puedes encontrar el $topic_name anterior en el código de la app para Android que se menciona en el proyecto de Firebase y en la configuración de 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 siguiente imagen:

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 aplicación a través de la API de FCM HTTP v1

Las siguientes referencias son útiles para explorar las funciones avanzadas que ofrece FCM: