如何在 Flutter 和 Firebase 的前台打印(message.data)

Posted

技术标签:

【中文标题】如何在 Flutter 和 Firebase 的前台打印(message.data)【英文标题】:How to print(message.data) on foreground at Flutter & Firebase 【发布时间】:2021-10-07 15:25:18 【问题描述】:

我正在将Cloud Messaging 函数添加到我的android APP,我无法在前台截断message.data。

例子是

FirebaseMessaging.onMessage.listen((RemoteMessage message) 
  print('Got a message whilst in the foreground!');
  print('Message data: $message.data');

  if (message.notification != null) 
    print('Message also contained a notification: $message.notification');
  
);

它应该打印第一行Got a message whilst in the foreground!..., 但我明白了

D/FLTFireMsgReceiver( XXXX): broadcast received for message
W/com.XXXXXX.XXXXXX( XXXX): Accessing hidden method Landroid/os/WorkSource;->add(I)Z (greylist,test-api, reflection, allowed)
W/com.XXXXXX.XXXXXX( XXXX): Accessing hidden method Landroid/os/WorkSource;->add(ILjava/lang/String;)Z (greylist,test-api, reflection, allowed)
W/com.XXXXXX.XXXXXX( XXXX): Accessing hidden method Landroid/os/WorkSource;->get(I)I (greylist, reflection, allowed)
W/com.XXXXXX.XXXXXX( XXXX): Accessing hidden method Landroid/os/WorkSource;->getName(I)Ljava/lang/String; (greylist, reflection, allowed)

我错过了什么吗?

【问题讨论】:

【参考方案1】:

从这个issue看来,这是firebase_messaging最新版本的一个错误,当前的解决方法是在收听消息之前添加一行来获取令牌。

将您的代码更新为:

await FirebaseMessaging.instance.getToken(); // Add this line
FirebaseMessaging.onMessage.listen((RemoteMessage message) 
  print('Got a message whilst in the foreground!');
  print('Message data: $message.data');

  if (message.notification != null) 
    print('Message also contained a notification: $message.notification');
  
);

【讨论】:

感谢回复,现在可以了。你知道如何不显示这个剪断吗? dart W/com.XXXXXX.XXXXXX( XXXX): Accessing hidden method Landroid/os/WorkSource;->add(I)Z (greylist,test-api, reflection, allowed) . . . 【参考方案2】:
 FirebaseMessaging.onMessage.listen((message) async 
      if (message.notification != null) 
      print(
          'Message contained a notification, with the following:\nTitle: $message.notification?.title\nBody: $message.notification?.body');
    
    return;
  ).onData((data) 
    print('Got a DATA message whilst in the FOREGROUND!');
    print('data is: $data.data');
  );

基本上您需要将onData 用于onMessage 或前景或背景。

【讨论】:

感谢回复,不过还是登录broadcast received for message... 将它也添加到前台消息中,并确保您实际上正在发送数据。它是一个Map 对象。 请问您使用的是哪个firebase_messaging ^版本?最新版本有一些错误。除此之外,您的剪辑工作完美。 firebase_messaging: ^10.0.3 firebase_messaging_web: ^2.0.2

以上是关于如何在 Flutter 和 Firebase 的前台打印(message.data)的主要内容,如果未能解决你的问题,请参考以下文章

Flutter + Firebase:如何实现“谷歌登录”

如何使用 Flutter 在 Firebase 中正确登录和注册?

如何在 Flutter 中从 firebase 存储读取和写入文本文件?

如何在 Flutter 和 Firebase 的前台打印(message.data)

如何使用 Flutter 和 Firebase 为聊天应用制定规则

如何在我的 firebase 和 flutter 应用上创建实时用户数?