0
votes

Messagerie Flutter Firebase - la notification push ne s'affiche pas lorsque l'application est ouverte

Je suis nouveau dans le flutter et j'essaie simplement de recevoir des notifications push Firebase sur mon application Flutter. Des notifications push sont reçues lorsque l'application est fermée et en arrière-plan. Mais lorsque l'application est ouverte, la notification push est reçue, mais elle n'affiche pas la notification d'alerte (je souhaite afficher le titre et le corps de la notification push comme une alerte dans mon application si elle est ouverte). Voici mon code pour cela.

_fcm.configure(
      onMessage: (Map<String, dynamic> message) async {
        showDialog(
          context: context,
          builder: (context) => AlertDialog(
            content: ListTile(
              title: Text(message['notification']['title']),
              subtitle: Text(message['notification']['body']),
            ),
            actions: <Widget>[
              FlatButton(
                child: Text('Ok'),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ],
          ),
        );
        print("onMessage: $message");
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
        
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );

Quelqu'un pourrait m'aider avec ça?


0 commentaires

3 Réponses :


0
votes

FCM vous propose trois rappels. OnResume , OnLaunch et OnMessage .

Lorsque l'application est au premier plan, le onMessage est déclenché et vous donne la possibilité d'effectuer toute action personnalisée.

Afin d'afficher une notification lorsque l'application est au premier plan, vous pouvez utiliser le package Flutter Local Notifications .

Vous ne pourrez peut-être pas voir une boîte de dialogue d'alerte en raison du manque de contexte dans le rappel onMessage. Essayez d' _fcm.configure le _fcm.configure intérieur

SchedulerBinding.instance.addPostFrameCallback((_){ [_fcm.configure block] });


2 commentaires

Salut, j'ai essayé SchedulerBinding.instance.addPostFrameCallback ((_) {[_fcm.configure block]}); mais la boîte de dialogue d'alerte ne s'affiche toujours pas


Pourquoi utilisez-vous "showOverlayNotification"? Vous pouvez simplement utiliser showDialog et passer une boîte de dialogue d'alerte à la méthode showDialog. Avez-vous essayé cela?



0
votes

Enfin, j'ai pu gérer mon problème en utilisant le package overlay_support

J'ai renvoyé les liens de questions suivants:

Flutter - Le Snackbar Firebase Messaging ne s'affiche pas

Flutter - comment obtenir le contexte actuel?

et j'ai géré mon problème en suivant le tutoriel et le package ci-dessous

tutoriel: https://medium.com/flutter-community/in-app-notifications-in-flutter-9c1e92ea10b3

package: https://pub.dev/packages/overlay_support/install

J'ai enveloppé mon widget MaterialApp () dans le widget OverlaySupport (). puis j'ajoute showOverlayNotification à mon _fcm.configure -> onMessage:

_fcm.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        showOverlayNotification((context) {
          return Card(
            margin: const EdgeInsets.symmetric(horizontal: 4),
            child: SafeArea(
              child: ListTile(
                leading: SizedBox.fromSize(
                    size: const Size(40, 40),
                    child: ClipOval(
                        child: Container(
                      color: Colors.black,
                    ))),
                title: Text(message['notification']['title']),
                subtitle: Text(message['notification']['body']),
                trailing: IconButton(
                    icon: Icon(Icons.close),
                    onPressed: () {
                      OverlaySupportEntry.of(context).dismiss();
                    }),
              ),
            ),
          );
        }, duration: Duration(milliseconds: 4000));

        print(message['notification']['title']);
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );


0 commentaires

1
votes

Vous pouvez utiliser le package Get pour afficher un snackBar lorsque l'utilisateur reçoit une notification alors que l'application est au premier plan.

_fcm.configure(
  onMessage: (Map<String, dynamic> message) async {
    Get.snackbar("message['notification']['title']", snackPosition: SnackPosition.TOP,);
  },
  onLaunch: (Map<String, dynamic> message) async {
    print("onLaunch: $message");
  },
  onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
  },
);

Le paramètre 'snackPosition' permet d'afficher le snackBar en haut, donc d'apparaître comme un message d'alerte.

Il y a une bonne explication sur la façon d'utiliser le package flutter_local_notifications en conjonction avec FCM ici


0 commentaires