Enviar un mensaje de prueba a una aplicación en segundo plano

Para comenzar con FCM, desarrolle el caso de uso más simple: enviar un mensaje de notificación de prueba desde el redactor de notificaciones a un dispositivo de desarrollo cuando la aplicación está en segundo plano en el dispositivo. Esta página enumera todos los pasos para lograr esto, desde la configuración hasta la verificación; puede cubrir los pasos que ya completó si ha configurado una aplicación Flutter para FCM.

Instale el complemento FCM

  1. Instala e inicializa los SDK de Firebase para Flutter si aún no lo has 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.

final fcmToken = await FirebaseMessaging.instance.getToken();

Enviar un mensaje de notificación de prueba

  1. Instale y ejecute la aplicación en el dispositivo de destino. En dispositivos Apple, deberás aceptar la solicitud de permiso para recibir notificaciones remotas.

  2. Asegúrese de que la aplicación esté en segundo plano en el dispositivo.

  3. En Firebase console, abre la página de Mensajería .

  4. Si este es su primer mensaje, seleccione Crear su primera campaña .

    1. Seleccione Mensajes de notificación de Firebase y seleccione Crear .
  5. De lo contrario, en la pestaña Campañas , seleccione Nueva campaña y luego Notificaciones .

  6. Ingrese el texto del mensaje. Todos los demás campos son opcionales.

  7. Seleccione Enviar mensaje de prueba en el panel derecho.

  8. En el campo etiquetado Agregar un token de registro de FCM , ingrese el token de registro que obtuvo en una sección anterior de esta guía.

  9. Seleccione Prueba .

Después de seleccionar Probar , el dispositivo cliente objetivo (con la aplicación en segundo plano) debería recibir la notificación.

Para obtener información sobre la entrega de mensajes a su aplicación, consulte el panel de informes de FCM , que registra la cantidad de mensajes enviados y abiertos en dispositivos Apple y Android, junto con datos de "impresiones" (notificaciones vistas por los usuarios) para aplicaciones de Android.

Manejo de la interacción

Cuando los usuarios tocan una notificación, el comportamiento predeterminado tanto en Android como en iOS es abrir la aplicación. Si se finaliza la aplicación, se iniciará y, si está en segundo plano, pasará a primer plano.

Dependiendo del contenido de una notificación, es posible que desee controlar la interacción del usuario cuando se abre la aplicación. Por ejemplo, si se envía un nuevo mensaje de chat mediante una notificación y el usuario lo selecciona, es posible que desee abrir la conversación específica cuando se abra la aplicación.

El paquete firebase-messaging proporciona dos formas de manejar esta interacción:

  1. getInitialMessage() : si la aplicación se abre desde un estado finalizado, este método devuelve un Future que contiene un RemoteMessage . Una vez consumido, el RemoteMessage se eliminará.
  2. onMessageOpenedApp : una Stream que publica un RemoteMessage cuando la aplicación se abre desde un estado en segundo plano.

Para garantizar una experiencia fluida para sus usuarios, debe manejar ambos escenarios. El siguiente ejemplo de código describe cómo se puede lograr esto:

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

La forma en que maneja la interacción depende de la configuración de su aplicación. El ejemplo anterior muestra un ejemplo básico del uso de StatefulWidget .

Próximos pasos

Enviar mensajes a aplicaciones en primer plano

Una vez que hayas enviado mensajes de notificación exitosamente mientras tu aplicación está en segundo plano, consulta Recibir mensajes en una aplicación Flutter para comenzar a enviar a aplicaciones en primer plano.

Vaya más allá de los mensajes de notificación

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

Luego, en tu aplicación cliente: