仔细尝试其他答案后,似乎没有任何效果。
当我单击通知并且应用程序已初始化时,通知工作正常。
当应用程序关闭或终止时,我无法将用户重定向到页面,因为 getInitialMessage() 的值为 null。
例如,这个返回null,但它是我的Flutter应用程序的主页
@override
void initState() {
super.initState();
FirebaseMessaging.instance
.getInitialMessage()
.then((message) => print('Initial message: $message'))
主.dart
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
}
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
runApp(const FrontDeskApp());
}
谢谢你
这可能是因为您以错误的方式使用 getInitialMessage() 方法的原因。
按照以下方式修改你的
main.dart
并进行测试。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
await FirebaseMessaging.instance.getInitialMessage().then((remoteMessage) {
// whenever you open the app from the terminate state by clicking on Notification message,
here you will get your remoteMessage.
// Set you App Screen Redirection here.
// Once consumed, the RemoteMessage will be removed.
});
runApp(const MyApp());
}
更多参考请参考官方文档通知交互的处理
我正在研究同样的问题。而且它似乎总是无效。
我认为误解是,如果应用程序不是通过单击推送消息打开,而是直接通过AppIcon打开
,则 getInitialMessage() 不会被填充文档说:
firebase-messaging 包提供了两种方法来处理这个问题 互动:
getInitialMessage():如果应用程序是从终止的状态打开的 声明将返回包含 RemoteMessage 的 Future。一次 消耗后,RemoteMessage 将被删除。 onMessageOpenedApp:A 当应用程序打开时发布 RemoteMessage 的流 背景状态。
通过交互,它可能指的是“例如,如果通过通知发送新的聊天消息并且用户按下它,”
https://firebase.google.com/docs/cloud-messaging/flutter/receive#handling_interaction
因此,当通过应用程序图标打开时,似乎无法跟踪是否存在挥之不去的推送通知。
如果我错了请纠正我。
在Android中,当点击通知获取remoteMessage时,您需要点击“通知”和“优先级”:“高”才能获取“getInitialMessage”。
{
"registration_ids": [
"deClPkv1RgmIYCK3sdxKmh:APA91bFIrld_TDA8FGDRcIcgdigyIYpzneULjvAqoRBfujcZ-hUankuzizfMmPFIU6G2Jy-7Edn4IUPrtuA8oPqdEMhLM9FrUozljgXJ69cl9mnqoRp2Q6J0nFirfo819PqCywox4e5T"
],
"data": {
"body": "this is subtitle",
"title": "this is title"
},
// don't remove this
"notification": {
"title": "this is title",
"body": "this is subtitle"
},
// don't remove this
"priority": "high",
"contentAvailable": 1
}