当应用程序在后台处于颤动状态时调用onMessage方法

问题描述 投票:2回答:3

我是新的扑动和飞镖。我正在尝试将我的应用程序与FCM连接。当应用程序在前台时,我创建了flutterLocalNotificationsPlugin并且一切正常,但是当我的应用程序处于后台时,我不知道如何处理onMessage方法。有人知道如何解决它吗?

FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();

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

 var androidInitSettings = new AndroidInitializationSettings('mipmap/ic_launcher');
 var iosInitSettings = new IOSInitializationSettings();
 var initSettings = new InitializationSettings(androidInitSettings, iosInitSettings);
 flutterLocalNotificationsPlugin.initialize(initSettings, selectNotification: onSelectNotification);

 firebaseMessaging.configure(
   onLaunch: (Map<String, dynamic> msg) {
     print(" onLaunch called ${(msg)}");
   },
   onResume: (Map<String, dynamic> msg) {
     print(" onResume called ${(msg)}");
   },
   onMessage: (Map<String, dynamic> msg) {
     showNotification(msg);
     print(" onMessage called ${(msg)}");
   },
 );
 firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, alert: true, badge: true));
 firebaseMessaging.onIosSettingsRegistered.listen((IosNotificationSettings setting) {
   print('IOS Setting Registed');
 });
 firebaseMessaging.getToken().then((token) {
   update(token);
 });
}
android dart firebase-cloud-messaging flutter android-notifications
3个回答
3
投票

根据Flutter版本4.0.0 + 1的最后一个插件Firebase Cloud Messaging,当您在控制台或表单上创建或编译推送通知时,请确保包括

click_action: FLUTTER_NOTIFICATION_CLICK 

作为定位Android设备时的“自定义数据”键值对(在“高级选项”下)。当您的应用处于后台状态时,此选项启用onResume


1
投票

我看到你在onMessage被触发时强行显示通知,如果应用程序在后台你不需要这样做,通知将自动创建。

当您收到通知并且应用程序已打开并在前台运行时,会触发onMessage。例如,您打开了Gmail应用,并收到了新的电子邮件,在这种情况下,您不需要在通知区域中弹出通知。应用程序可能会选择直接处理它,并且一旦收到通知就会触发onMessage - 这很好,因此您不需要保持池服务器。

onResumeonLaunch有点不同 - 收到通知时不会触发这两个事件。仅当用户从通知区域选择/点击通知时才触发它们。因此,在这两种情况下,应用程序当前都是隐藏的,或者通过不运行(终止),或者应用程序处于后台 - 未显示。在这种情况下,通知会在手机中收到并自动放入通知区域(您无需为此编码“showNotification”)。在此状态下,用户可以看到通知,但应用程序本身尚未发现通知。

只有当用户选择其中一个通知时,应用才会知道通知。

如果应用程序根本没有运行,则当用户点击通知时将触发onLaunch。这意味着应用程序没有运行,并且由于通知它必须“从头开始”。

如果应用程序处于后台,则当用户选择通知时,将触发onResume,将应用程序恢复到前台状态。

编辑:

正如@boformer所指出的,这仅适用于“通知”消息。如果您要发送“数据”消息,则不会创建任何通知,并且仅通过onMessage传递消息。更多细节在the plugin readmefirebase docs


0
投票

当应用程序处于后台时,Dart VM不会运行。这意味着您必须使用本机代码(Java / Kotlin / ObjectiveC / Swift)处理通知和数据消息。

要在Android上执行此操作,请参阅official documentation

您可能必须删除firebase_messaging插件并手动执行所有消息处理。要将通知内容发送到您的flutter应用程序(当它在前台时),请使用平台频道。

查看firebase_messaging插件的源代码以查看本机端发生的情况确实很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.