es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Las notificaciones push de Flutter no funcionan cuando la aplicación no está en segundo plano?

Las notificaciones push de Firebase funcionan perfectamente cuando la aplicación se está ejecutando o si existe en segundo plano, pero no funcionan cuando estoy en la aplicación o si la aplicación se cierra desde segundo plano, ¡por favor ayuda!

Aquí está el código de la notificación:

var myToken;
  final fbm =FirebaseMessaging();
  Future<void> showFirebaseNotification() async{
    final fbm = FirebaseMessaging();
    fbm.requestNotificationPermissions();
    fbm.configure(
       onMessage: (msg){
        print(msg);
        return;
      },
      onLaunch: (msg){
        print(msg);
        return;
      },
      onResume: (msg){
        print(msg);
        return;
      }
    );
  }
  @override
  void initState(){
    showFirebaseNotification();
    fbm.getToken().then((String token) {
      assert(token != null);
      setState(() {
        myToken = token;
      });
      print(myToken);
    });
    super.initState();
  }

Esto es lo que devuelve en el emulador que puedes encontrar en la imagen de abajo:

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para que las notificaciones push de Firebase no funcionen cuando la aplicación está en primer plano o se ha cerrado desde segundo plano:

    El problema puede estar en la función showFirebaseNotification(). Esta función solo solicita permiso para mostrar notificaciones y no registra realmente el dispositivo para recibir notificaciones. Además, la instancia FirebaseMessaging() que se está utilizando dentro de la función showFirebaseNotification() no es la misma instancia que se utiliza en la función initState().

    Para solucionar el problema, sigue estos pasos:

    1. Crea una nueva función, llamémosla registerDevice(), que solicitará permiso para mostrar notificaciones y registrará el dispositivo para recibir el Token de Firebase Cloud Messaging (FCM).
      Future<void> registerDevice() async {
       final FirebaseMessaging firebaseMessaging = FirebaseMessaging();
       firebaseMessaging.requestNotificationPermissions();
      
       String fcmToken = await firebaseMessaging.getToken();
       print("FCM Token: $fcmToken");
      }
      
    2. Mueve la instancia FirebaseMessaging() fuera de la función showFirebaseNotification() y utiliza la misma instancia en las funciones registerDevice() y initState().
      final FirebaseMessaging firebaseMessaging = FirebaseMessaging();
      
      Future<void> registerDevice() async {
       firebaseMessaging.requestNotificationPermissions();
      
       String fcmToken = await firebaseMessaging.getToken();
       print("FCM Token: $fcmToken");
      }
      
      @override
      void initState() {
       registerDevice();
      
       firebaseMessaging.configure(
         onMessage: (msg) {
           print(msg);
           return;
         },
         onLaunch: (msg) {
           print(msg);
           return;
         },
         onResume: (msg) {
           print(msg);
           return;
         },
       );
      
       super.initState();
      }
      
    3. Asegúrate de que el Token de FCM se imprima en la consola cuando la aplicación se inicie.
      String fcmToken = await firebaseMessaging.getToken();
      print("FCM Token: $fcmToken");
      

    Siguiendo estos pasos, la aplicación debería recibir ahora notificaciones push incluso cuando esté en primer plano o se haya cerrado desde segundo plano.

Comments are closed.