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

1. Introducción

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

Este codelab lo guía a través del proceso de configuración del lado del cliente y del servidor para permitir el envío de notificaciones push a una aplicación de Android mediante la API HTTP v1 de FCM. Destaca el paso clave de la generación de credenciales para la API v1.

Puede encontrar más información en:

Requisitos previos

  • Conocimientos básicos del desarrollo de Java y Android.

lo que aprenderás

  • Pasos detallados de la configuración del lado del cliente y del servidor para permitir el envío de notificaciones automáticas a su aplicación de Android utilizando la API FCM HTTP v1
  • Generación de credenciales para la API HTTP v1 mediante cuentas de servicio
  • Envío de mensajes de prueba a través de la API HTTP v1

Lo que necesitarás

Última versión estable de Android Studio

Uno de los siguientes dispositivos:

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

2. Proyecto Firebase y configuración de la aplicación de Android

Al final de la práctica de código, podrá enviar mensajes a su aplicación mediante Firebase Cloud Messaging. Antes de hacer eso, necesitarás crear un proyecto de Firebase. Este codelab también proporciona una aplicación de Android que contiene código de muestra para integrar con FCM.

Configuración del proyecto Firebase

configuración de la aplicación de Android

La aplicación de Android de muestra proporcionada en este codelab ya está integrada con FCM. Después de comenzar, se registrará en el servidor FCM y se suscribirá a un tema. En los pasos posteriores de este codelab, enviarás un mensaje de tema al tema y tu aplicación lo recibirá.

3. Configure el servidor de aplicaciones

Ahora que su aplicación está configurada, deberá descargar un ejemplo de código del lado del servidor para enviar mensajes a su aplicación utilizando la API FCM v1. Este código carga las credenciales de API (descritas en la siguiente sección) para generar un token de acceso. Luego envía un mensaje a su aplicación mediante mensajes de temas de FCM.

  • Importe el código del servidor de inicio descargando el proyecto Github . El proyecto de "mensajería" es un proyecto Java basado en Gradle que depende del SDK de firebase-admin , que proporciona funcionalidad para enviar mensajes.

Puede encontrar más detalles sobre cómo debería funcionar un servidor de aplicaciones con FCM en el documento Su entorno de servidor y FCM .

4. Obtenga las credenciales v1

La API FCM HTTP v1 utiliza tokens de acceso de corta duración según el modelo de seguridad OAuth2. En comparación con la clave API estática utilizada en la API heredada de FCM, el token de acceso de corta duración es menos propenso al riesgo de fuga de credenciales. Esta sección detalla los pasos para crear una credencial para generar el token de acceso utilizado al llamar a la API.

  1. Configure una cuenta de servicio de Firebase para permitir que el SDK de administrador de Firebase autorice llamadas a las API de FCM. Abra Configuración del proyecto en Firebase console y seleccione la pestaña Cuentas de servicio . Haga clic en Generar nueva clave privada para descargar el fragmento de configuración. Una captura de pantalla recortada que resalta el fragmento de configuración del SDK de administración del componente de cuentas de servicio de la página de configuración del proyecto.
  2. En el proyecto Github descargado, cambie el nombre del archivo descargado a service-account.json y cópielo en messaging/ ruta del proyecto.
  3. El método getAccessToken() (que se muestra a continuación) en la clase Messaging.java genera un token 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. Cambie el método principal para agregar la siguiente línea:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. Vaya al directorio de mensajería/proyecto en su terminal y escriba:
./gradlew run -Pmessage=common-message

para imprimir el token OAuth2.

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

5. Envía un mensaje con la API REST

Ahora está listo para enviar un mensaje a través de la API HTTP v1. Siga los pasos a continuación:

  • Para agregar el token de acceso a un encabezado de solicitud HTTP:
  • Agregue el token como valor del encabezado Autorización en el formato Authorization: Bearer <access_token>
  • Realice una solicitud HTTP a la API FCM v1 usando 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 aplicación de Android mencionado en el proyecto Firebase y en la configuración de la aplicación de Android. Por defecto es "weather" .

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

54ae84ece22202cd.png

6. Conclusión

¡Felicidades! Has completado con éxito el codelab para:

  • Configurar un proyecto de Firebase
  • Integra Firebase con una aplicación de Android
  • Cree credenciales para la API FCM HTTP v1
  • Envíe un mensaje a su aplicación a través de la API FCM HTTP v1

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