如何在 Flutter 中使用 Firebase Messaging ^8.0.0-dev.8 收到通知时 运行 函数?
How to run a function when a notification is received with Firebase Messaging ^8.0.0-dev.8 in Flutter?
您好,我正在使用 Flutter 构建我的应用程序,我需要在收到新通知时显示警报。
我一直在使用 firebase_messaging 7.0.3
,但我 运行 使用 onBackgroundMessage
时出错。快速 Google 搜索帮助我发现我遇到的错误尚未修复。然而,其中一位开发人员在 20 天前发布了有关解决该问题的新版本软件包的更新。
新版本删除了旧的 onMessage 处理程序并引入了新的处理程序。
现在他们有了 return 流的新事件处理程序,但无法通过使用
.listen()
函数。每当我收到通知时,控制台都会打印 D/FLTFireMsgReceiver(22032): broadcast received for message
但 .listen()
中的代码不会执行。
Here 是一篇关于 Firebase Flutter 的文章的 link,该文章是使用新版本包的指南。
这是我的代码:
...
FirebaseMessaging.onMessage.listen((event) {
// do something
});
FirebaseMessaging.onMessageOpenedApp.listen((event) {
// do something
});
FirebaseMessaging.onBackgroundMessage((message) {
// do something
return;
}
...
我发现让事件触发的解决方案是始终调用:
await FirebaseMessaging.instance.getToken();
紧接着
await Firebase.initializeApp();
一旦我调用它,FirebaseMessaging.onMessage.listen
就会按预期捕获事件。
- 当我的应用程序处于休眠模式时,我收到了相同的日志以获取高优先级的数据通知。
这是因为 firebase-messaging 插件中的一些问题。
- Firebase_messaging插件内部使用JobIntentService处理后台fcm通知
- JobIntentService 在 AndroidO 或更高版本中有一个约束,当 运行Job 将受制于标准的 JobScheduler 策略。当设备处于休眠模式时,作业不会立即 运行。 (reference link)
- 在 firebase_messaging git 存储库 (bug link)
中提出了同样的问题
解决方案
- One Signal(另一个推送通知 provider)通过修改版本的 JobIntentService 解决了这个问题。 (OneSignal Solution)
- 在较高级别,即使在 Android O 及更高级别,它也使用唤醒锁来向 [=54=] 服务发送高优先级 fcm 通知。
- 通过编辑相应的文件在您的 ide 中添加此 Pull Request 更改。
TL;DR
Add this Pull Request changes in your ide by editing respective files.
Send Data notification with High priority.
FCM 负载:
{
"message": {
"token": "fcm_client_token",
"data": {
"title": "Hello",
"body": "Test Message"
},
"android": {
"priority": "high"
}
}
}
您好,我正在使用 Flutter 构建我的应用程序,我需要在收到新通知时显示警报。
我一直在使用 firebase_messaging 7.0.3
,但我 运行 使用 onBackgroundMessage
时出错。快速 Google 搜索帮助我发现我遇到的错误尚未修复。然而,其中一位开发人员在 20 天前发布了有关解决该问题的新版本软件包的更新。
新版本删除了旧的 onMessage 处理程序并引入了新的处理程序。
现在他们有了 return 流的新事件处理程序,但无法通过使用
.listen()
函数。每当我收到通知时,控制台都会打印 D/FLTFireMsgReceiver(22032): broadcast received for message
但 .listen()
中的代码不会执行。
Here 是一篇关于 Firebase Flutter 的文章的 link,该文章是使用新版本包的指南。
这是我的代码:
...
FirebaseMessaging.onMessage.listen((event) {
// do something
});
FirebaseMessaging.onMessageOpenedApp.listen((event) {
// do something
});
FirebaseMessaging.onBackgroundMessage((message) {
// do something
return;
}
...
我发现让事件触发的解决方案是始终调用:
await FirebaseMessaging.instance.getToken();
紧接着
await Firebase.initializeApp();
一旦我调用它,FirebaseMessaging.onMessage.listen
就会按预期捕获事件。
- 当我的应用程序处于休眠模式时,我收到了相同的日志以获取高优先级的数据通知。 这是因为 firebase-messaging 插件中的一些问题。
- Firebase_messaging插件内部使用JobIntentService处理后台fcm通知
- JobIntentService 在 AndroidO 或更高版本中有一个约束,当 运行Job 将受制于标准的 JobScheduler 策略。当设备处于休眠模式时,作业不会立即 运行。 (reference link)
- 在 firebase_messaging git 存储库 (bug link) 中提出了同样的问题
解决方案
- One Signal(另一个推送通知 provider)通过修改版本的 JobIntentService 解决了这个问题。 (OneSignal Solution)
- 在较高级别,即使在 Android O 及更高级别,它也使用唤醒锁来向 [=54=] 服务发送高优先级 fcm 通知。
- 通过编辑相应的文件在您的 ide 中添加此 Pull Request 更改。
TL;DR
Add this Pull Request changes in your ide by editing respective files. Send Data notification with High priority.
FCM 负载:
{
"message": {
"token": "fcm_client_token",
"data": {
"title": "Hello",
"body": "Test Message"
},
"android": {
"priority": "high"
}
}
}