Flutter Firebase消息-应用程序打开时未显示推送通知

zengzsys  于 2023-05-01  发布在  Flutter
关注(0)|答案(6)|浏览(273)

我是Flutter的新手,我只是想接收Flutter应用程序的firebase推送通知。当应用程序关闭并处于后台时,将接收推送通知。但是当应用程序打开时,推送通知正在接收,但它不显示警报通知(我想在我的应用程序中显示推送通知标题和正文作为警报,如果它打开的话)。这是我的代码。

_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");
      },
    );

有人能帮帮我吗?

k2arahey

k2arahey1#

最后,我能够通过使用overlay_support包来管理我的问题
我提到了以下问题链接:
Flutter - Firebase Messaging Snackbar not showing
Flutter -如何获取当前上下文?
我按照下面的教程和包管理我的问题
教程:https://medium.com/flutter-community/in-app-notifications-in-flutter-9c1e92ea10b3
软件包:https://pub.dev/packages/overlay_support/install
我将MaterialApp()小部件 Package 在OverlaySupport()小部件中。

return OverlaySupport(
            child: MaterialApp(....
               
          ));

然后我将showOverlayNotification添加到my _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");
      },
    );
bkhjykvo

bkhjykvo2#

您可以使用Get包在应用程序位于前台时,当用户收到通知时显示snackBar。

_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");
  },
);

'snackPosition'参数允许snackBar显示在顶部,因此显示为警报消息。
这里有一个很好的说明,说明了如何将flutter_local_notifications包与FCM here结合使用

jbose2ul

jbose2ul3#

FCM为您提供了三个回调。OnResumeOnLaunchOnMessage
当应用程序在前台时,onMessage被触发,它让你有机会执行任何自定义操作。
为了在应用程序处于前台时显示通知,您可以使用Flutter Local Notifications包。
由于onMessage回调中缺少上下文,您可能无法看到警报对话框。试着把_fcm.configure包在里面

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

lrl1mhuk4#

伙计们,如果你已经把手机连接到电脑上,正在测试它,它就不会显示通知。同样的事情发生在我身上,所以我建立了apk,然后再次尝试它实际上工作

iyr7buue

iyr7buue5#

实际上Android的默认行为就像当应用程序打开时不显示通知
所以,如果你想在应用程序打开时显示通知,然后add below line after initializing FirebaseApp and FirebaseMessaging

FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(alert: true,badge: true,sound: true);
eqoofvh9

eqoofvh96#

打开应用程序时处理通知的新方法如下:

// Called when the app is in background state
  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async {
    await _handleMessage(message);
  });

  // Called when the app is in foreground (open)
  FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
    await _handleMessage(message);
  });

相关问题