如何使用 FCM 后台通知更新 UI?
Posted
技术标签:
【中文标题】如何使用 FCM 后台通知更新 UI?【英文标题】:How to update the UI with FCM background notifications? 【发布时间】:2021-06-02 02:22:55 【问题描述】:当用户点击通知时,我想导航到某个页面。我正在使用云消息传递和flutter_local_notifications。我已经设法通过前台通知来做到这一点。这很简单。我将相同的代码粘贴到我的后台通知处理程序中,但没有用。我也在寻找通知的 onTap 回调,但找不到与此相关的任何内容。
这是我的后台通知处理程序。
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async
await Firebase.initializeApp();
var androidDetails = AndroidNotificationDetails(
"Channel ID",
"Shannonside",
"Shannonside Channel",
);
var iosDetails = IOSNotificationDetails();
var details = NotificationDetails(
android: androidDetails,
iOS: iosDetails,
);
if (message.notification != null)
final title = message.notification.title;
final body = message.notification.body;
await NotificationService.localNotification.show(0, title, body, details);
if (message.data != null)
var articleId = message.data['articleId'];
var category = message.data['category'];
if (articleId != null && category != null)
print("ArticleID: $articleId Category $category");
//@TODO Add navigation service and move to the article detail
NavigatorService.instance.navigateTo("/articlePage", arguments:
"articleId": articleId.toString().toLowerCase(),
"category": category.toString().toLowerCase(),
);
它不起作用,甚至我的功能都没有启动。他们还在文档中声明这是不可能的。
由于处理程序在您的应用程序上下文之外在其自己的隔离中运行,因此无法更新应用程序状态或执行任何影响 UI 的逻辑。但是,您可以执行诸如 HTTP 请求、IO 操作(更新本地存储)、与其他插件通信等逻辑。
我知道有些应用会这样做,当您单击通知时它们会打开一些页面。就像一个动态链接。我想在我的应用中实现它。
【问题讨论】:
看看这个:pub.dev/packages/firebase_messaging @Andrej 我已经阅读了有关 Firebase 消息传递的 FlutterFire 文档。还粘贴了文档中的一些引用。如果您认为我遗漏了什么,请告诉我,而不是发送整个文档。 【参考方案1】:你可以使用函数
FirebaseMessaging.instance
.getInitialMessage()
.then((RemoteMessage message)
print("FirebaseMessaging.getInitialMessage");
if (message != null)
Navigator.of(context).pushNamed('/call');
);
此功能仅在应用程序打开时第一次运行,它获取最后一条消息
【讨论】:
以上是关于如何使用 FCM 后台通知更新 UI?的主要内容,如果未能解决你的问题,请参考以下文章
如何在应用程序处于后台(ios)时使 FCM 通知正常工作?
当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?