Configurar una aplicación cliente Firebase Cloud Messaging en Flutter

Siga estos pasos para configurar un cliente FCM en Flutter.

Configuración y requisitos específicos de la plataforma

Algunos de los pasos requeridos dependen de la plataforma a la que se dirige.

iOS+

Habilitar las capacidades de la aplicación en Xcode

Antes de que su aplicación pueda comenzar a recibir mensajes, debe habilitar las notificaciones automáticas y los modos en segundo plano en su proyecto Xcode.

  1. Abra el espacio de trabajo de su proyecto Xcode ( ios/Runner.xcworkspace ).
  2. Habilitar notificaciones push .
  3. Habilite los modos de ejecución en segundo plano de recuperación en segundo plano y notificaciones remotas .

Cargue su clave de autenticación de APN

Antes de usar FCM, cargue su certificado APN en Firebase. Si aún no tiene un certificado APN, cree uno en el Centro de miembros desarrolladores de Apple .

  1. Dentro de su proyecto en Firebase console, seleccione el ícono de ajustes, seleccione Configuración del proyecto y luego seleccione la pestaña Mensajería en la nube .
  2. Seleccione el botón Cargar certificado para su certificado de desarrollo, su certificado de producción o ambos. Se requiere al menos uno.
  3. Para cada certificado, seleccione el archivo .p12 y proporcione la contraseña, si corresponde. Asegúrese de que el ID del paquete de este certificado coincida con el ID del paquete de su aplicación. Seleccione Guardar .

Método de giro

Para utilizar el complemento FCM Flutter en dispositivos Apple, no debe desactivar el método swizzling. Se requiere Swizzling y, sin él, las funciones clave de Firebase, como el manejo de tokens de FCM, no funcionan correctamente.

Androide

Servicios de Google Play

Los clientes de FCM requieren dispositivos con Android 4.4 o superior que también tengan instalados los servicios de Google Play, o un emulador que ejecute Android 4.4 con las API de Google. Tenga en cuenta que no está limitado a implementar sus aplicaciones de Android a través de Google Play Store.

Las aplicaciones que dependen del SDK de servicios de Play siempre deben verificar en el dispositivo un APK de servicios de Google Play compatible antes de acceder a las funciones de servicios de Google Play. Se recomienda hacer esto en dos lugares: en el método onCreate() de la actividad principal y en su método onResume() . La verificación en onCreate() garantiza que la aplicación no se pueda utilizar sin una verificación exitosa. La verificación en onResume() garantiza que si el usuario regresa a la aplicación en ejecución por algún otro medio, como a través del botón Atrás, la verificación aún se realiza.

Si el dispositivo no tiene una versión compatible de los servicios de Google Play, su aplicación puede llamar a GoogleApiAvailability.makeGooglePlayServicesAvailable() para permitir a los usuarios descargar los servicios de Google Play desde Play Store.

Web

Configurar credenciales web con FCM

La interfaz web de FCM utiliza credenciales web denominadas "Identificación voluntaria del servidor de aplicaciones" o claves "VAPID" para autorizar el envío de solicitudes a servicios web push compatibles. Para suscribir su aplicación para recibir notificaciones automáticas, debe asociar un par de claves con su proyecto de Firebase. Puede generar un nuevo par de claves o importar su par de claves existente a través de Firebase console.

Generar un nuevo par de claves
  1. Abra la pestaña Mensajería en la nube del panel Configuración de Firebase console y desplácese hasta la sección Configuración web .

  2. En la pestaña Certificados Web Push , haga clic en Generar par de claves . La consola muestra un aviso de que se generó el par de claves y muestra la cadena de clave pública y la fecha en que se agregó.

Importar un par de claves existente

Si tiene un par de claves existente que ya está utilizando con su aplicación web, puede importarlo a FCM para poder acceder a las instancias de su aplicación web existente a través de las API de FCM. Para importar claves, debes tener acceso de nivel de propietario al proyecto de Firebase. Importe su clave pública y privada existente en formato codificado de forma segura en URL base64:

  1. Abra la pestaña Mensajería en la nube del panel Configuración de Firebase console y desplácese hasta la sección Configuración web .

  2. En la pestaña Certificados Web Push , busque y seleccione el texto del enlace "importar un par de claves existente".

  3. En el cuadro de diálogo Importar un par de claves , proporcione sus claves públicas y privadas en los campos correspondientes y haga clic en Importar . La consola muestra la cadena de clave pública y la fecha en que se agregó.

Para obtener más información sobre el formato de las claves y cómo generarlas, consulte Claves del servidor de aplicaciones .

Instale el complemento FCM

  1. Instale e inicialice los complementos de Firebase para Flutter si aún no lo ha hecho.

  2. Desde la raíz de su proyecto Flutter, ejecute el siguiente comando para instalar el complemento:

    flutter pub add firebase_messaging
    
  3. Una vez completado, reconstruya su aplicación Flutter:

    flutter run
    

Accede al token de registro

Para enviar un mensaje a un dispositivo específico, necesita conocer el token de registro de ese dispositivo. Debido a que necesitarás ingresar el token en un campo en la consola de Notificaciones para completar este tutorial, asegúrate de copiar el token o almacenarlo de forma segura después de recuperarlo.

Para recuperar el token de registro actual para una instancia de aplicación, llame getToken() . Si no se ha concedido el permiso de notificación, este método solicitará permisos de notificación al usuario. En caso contrario, devuelve un token o rechaza el futuro debido a un error.

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, ensure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

En plataformas web, pase su clave pública VAPID a getToken() :

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

Para recibir una notificación cada vez que se actualice el token, suscríbase a la transmisión onTokenRefresh :

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

Prevenir la inicialización automática

Cuando se genera un token de registro de FCM, la biblioteca carga el identificador y los datos de configuración en Firebase. Si prefiere evitar la generación automática de tokens, desactive la inicialización automática en el momento de la compilación.

iOS

En iOS, agregue un valor de metadatos a su Info.plist :

FirebaseMessagingAutoInitEnabled = NO

Androide

En Android, deshabilite la recopilación de Analytics y la inicialización automática de FCM (debe deshabilitar ambas) agregando estos valores de metadatos a su AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Vuelva a habilitar el inicio automático de FCM en tiempo de ejecución

Para habilitar el inicio automático para una instancia de aplicación específica, llame a setAutoInitEnabled() :

await FirebaseMessaging.instance.setAutoInitEnabled(true);

Este valor persiste durante los reinicios de la aplicación una vez establecido.

Próximos pasos

Una vez configurada la aplicación cliente, estará listo para comenzar a enviar mensajes posteriores con el redactor de notificaciones . Consulta Enviar un mensaje de prueba a una aplicación en segundo plano .

Para agregar otro comportamiento más avanzado a su aplicación, necesitará una implementación de servidor .

Luego, en tu aplicación cliente: