firebase - Flutter - onLaunch 中的 Firebase 云消息导航不起作用
问题描述
我正在构建一个使用 FCM 接收推送通知的应用程序。
我想在单击通知时路由到特定屏幕(例如,用户的个人资料)。
在 Android 上,当应用程序刚刚关闭(而不是“杀死”)时,它工作得非常好,但是当应用程序被终止(“杀死”)时,它就不起作用了。在 iOS 上,它根本不起作用。
我正在实施它:
通知处理程序:
class NotificationsHandler {
static final NotificationsHandler instance = NotificationsHandler();
final _fcm = FirebaseMessaging();
void onBackgroundNotificationRecevied({Function onReceived}) {
_fcm.configure(
onResume: (message) => onReceived(message),
onLaunch: (message) => onReceived(message),
);
}
}
myMainScreen 的 initState:
@override
void initState() {
NotificationsHandler.instance.onBackgroundNotificationRecevied(
onReceived: (message) async {
final userId = message['data']['userId'];
final user = this.users.firstWhere((currentUser) => currentUser.id == userId);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UserProfileScreen(
user,
),
),
);
}
);
super.initState();
}
发送通知的代码(通过外部 React 管理面板):
const payload = {
notification: {
title: `myTitle`,
body: `My message`,
sound: "default",
badge: "1",
click_action: "FLUTTER_NOTIFICATION_CLICK",
},
data: {
click_action: 'FLUTTER_NOTIFICATION_CLICK',
userId: myUserId,
},
};
const options = {
priority: 'high',
timeToLive: 60 * 60 * 24
};
admin.messaging().sendToTopic('myTopic', payload, options);
有谁知道为什么它不起作用?
谢谢!
解决方案
您可以尝试使用getInitialMessage
而不是onLaunch
. 我相信这会做你想要的,因为文档表明以下几行:
这应该用于确定特定通知交互是否应该以特定目的打开应用程序(例如打开聊天消息、特定屏幕等)。
@override
void initState() {
super.initState();
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage message) {
if (message != null) {
Navigator.pushNamed(context, '/message', arguments: MessageArguments(message, true));
}
});
}
推荐阅读
- c - 如何直接从序数 12 调用 SHCreateMemStream()
- c++ - 使用 mingW g++ 解决 Visual Studio Code 中的“致命错误:GLFW/glfw3.h: No such file or directory”
- electron - 在 electron-builder 中首次安装后使用一键安装
- prolog - 从两个列表中减去元素 | 序言
- python - 与 if 语句混淆
- vb.net - 如何使用 vb.net 连接到 Clipper (E5) DBF 文件(带有 SMT)
- python - 如何修复更新库存项目数量?
- scala - 将scala隐式转换纳入范围的问题
- rust - Stdin::lock 在哪些情况下有用?
- python - 如何让 SymPy 将 (B*x)^a*(C*x)^-a 简化为 (B/C)^a?