我已经设法使用Firebase云消息传递将通知推送到我的flutter应用程序。我现在想做的是,一旦我单击通知,它将直接转到应用程序具有的特定页面。如何将通知重定向到特定页面?谢谢
我的 FCM 课上有这样的内容:
\n\nstatic StreamController<Map<String, dynamic>> _onMessageStreamController =\n StreamController.broadcast();\nstatic StreamController<Map<String, dynamic>> _streamController =\n StreamController.broadcast();\nstatic final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();\nstatic final Stream<Map<String, dynamic>> onFcmMessage =\n _streamController.stream;\n\nstatic setupFCMListeners() {\n print("Registered FCM Listeners");\n _firebaseMessaging.configure(\n onMessage: (Map<String, dynamic> message) async {\n _onMessageStreamController.add(message);\n },\n onLaunch: (Map<String, dynamic> message) async {\n _streamController.add(message);\n },\n onResume: (Map<String, dynamic> message) async {\n _streamController.add(message);\n },\n );\n }\n\n static Widget handlePath(Map<String, dynamic> dataMap) {\n var path = dataMap["route"];\n var id = dataMap["id"];\n return handlePathByRoute(path, id);\n }\n\n static Widget handlePathByRoute(String route, String routeId) {\n switch (route) {\n case "user":\n return Profile(guid: routeId);\n case "event":\n return EventInfo(eventId: routeId);\n case "messaging":\n return MessagingView(guid: routeId);\n default:\n return null;\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我main.dart订阅了 onFcmMessage 流,但您不需要流来完成这一切。此外,您还需要一些代码来处理流失败和关闭。
但是,当应用程序进入前台时,它会在onMessage回调或onLaunch或上收到消息onResume。在 FCM flutter pub 文档上检查它们的差异。
方法handlePath和handlePathByRoute是通常我的 main.dart 或其他侦听通知的类调用以获取要路由到的路径的方法,但您可以通过替换此处的流代码来直接调用它们,例如:
static setupFCMListeners() {\n print("Registered FCM Listeners");\n _firebaseMessaging.configure(\n onMessage: (Map<String, dynamic> message) async {\n print("Message: $message"); // Not handling path since on notification in app it can be weird to open a new page randomly.\n },\n onLaunch: (Map<String, dynamic> message) async {\n handlePath(message);\n },\n onResume: (Map<String, dynamic> message) async {\n handlePath(message);\n },\n );\n }\nRun Code Online (Sandbox Code Playgroud)\n\n老实说,这可能不是最好的方法,但由于缺乏文档,这就是我现在正在使用的方法。我很想尝试 G\xc3\xbcnter Z\xc3\xb6chbauer\ 的方法,并在可能的情况下保存一些对象创建!
\n\n希望这有帮助!:)
\n\n编辑:Profile和EventInfo是MessagingView扩展的三个类StatefulWidget,如果不清楚,抱歉。
您还可以尝试使用命名路由,它们像 api 路由一样更容易,避免大量导入并拥有中央路由器,但据我所知它们缺乏转换配置。
\n| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |