FirebaseMessaging.instance.getInitialMessage() 返回 null

问题描述 投票:0回答:3

仔细尝试其他答案后,似乎没有任何效果。

当我单击通知并且应用程序已初始化时,通知工作正常。

当应用程序关闭或终止时,我无法将用户重定向到页面,因为 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());
}

谢谢你

flutter firebase dart firebase-cloud-messaging
3个回答
0
投票

这可能是因为您以错误的方式使用 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());
}

更多参考请参考官方文档通知交互的处理


0
投票

我正在研究同样的问题。而且它似乎总是无效。

我认为误解是,如果应用程序不是通过单击推送消息打开,而是直接通过AppIcon打开

,则 getInitialMessage() 不会被填充

文档说:

firebase-messaging 包提供了两种方法来处理这个问题 互动:

getInitialMessage():如果应用程序是从终止的状态打开的 声明将返回包含 RemoteMessage 的 Future。一次 消耗后,RemoteMessage 将被删除。 onMessageOpenedApp:A 当应用程序打开时发布 RemoteMessage 的流 背景状态。

通过交互,它可能指的是“例如,如果通过通知发送新的聊天消息并且用户按下它,”

https://firebase.google.com/docs/cloud-messaging/flutter/receive#handling_interaction

因此,当通过应用程序图标打开时,似乎无法跟踪是否存在挥之不去的推送通知。

如果我错了请纠正我。


0
投票

在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
}
© www.soinside.com 2019 - 2024. All rights reserved.