android - 当应用程序在后台运行时调用 onMessage 方法
问题描述
我是颤振和飞镖的新手。我正在尝试将我的应用程序与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);
});
}
解决方案
我看到你在触发时强制显示通知onMessage
,如果应用程序在后台,你不需要这样做,通知将自动创建。
当onMessage
您收到通知并且应用程序打开并在前台运行时触发。例如,您打开了 Gmail 应用程序,并收到了一封新电子邮件,在这种情况下,您不需要在通知区域弹出通知。该应用程序可能会选择直接处理它,并在onMessage
收到通知后立即触发 - 这很好,因此您无需继续共享服务器。
和有点不同 - 这两个事件在收到通知时不会触发onResume
。onLaunch
它们仅在用户从通知区域选择/点击通知时触发。因此,在这两种情况下,应用程序当前都处于隐藏状态,要么根本不运行(终止),要么应用程序处于后台 - 未显示。在这种情况下,手机会收到通知并自动放置在通知区域中(您无需为此编码“ showNotification
”)。在这种状态下,用户可以看到通知,但应用程序本身还没有意识到它。
当用户选择这些通知之一时,应用程序才会知道该通知。
如果应用程序根本没有运行,onLaunch
则会在用户点击通知时触发。这意味着该应用程序没有运行,并且由于收到通知,它必须“从头开始”。
如果应用程序在后台,onResume
当用户选择通知时将触发,将应用程序恢复到前台状态。
编辑:
正如@boformer 所指出的,这仅适用于“通知”消息。如果您要发送“数据”消息,则不会创建通知,并且消息仅通过onMessage
. 插件自述文件和firebase 文档中的更多详细信息。
推荐阅读
- python - k-means ++ 适合大数据吗?
- android - 将 Android 应用程序从 SQLiteOpenHelper 迁移到 Room
- android - 在 Android 上检索 Facebook 个人资料帖子(状态)
- javascript - 为什么我不能从本地存储中取出解析的 JSON 对象?
- javascript - 数据表无法重新初始化数据表并且销毁不起作用
- algorithm - 是否有任何有效的算法来检查我是否至少有一个有效组合可以从一组有效组合中获胜?
- android - 应用缓慢。有人可以建议我该怎么做吗?
- vba - Excel VBA手动选择一个文件夹来循环遍历其中的所有excel文件
- python - 使用 Beautifulsoup4 查找 .nextsibling
- javascript - 正则表达式匹配第二个单词的开头字母