Flutter - 如何处理FCM的onResume和onLaunch方法?

6
我的问题似乎与这个firebase_messaging onResume和onLaunch不工作相似,但我认为该解决方案对我没有用,因为我已经在尝试访问data属性中的字段。

当应用程序正在运行时,我当前正在向用户显示推送通知,这部分工作正常。 但是,我还想在应用程序处于后台时显示通知,并且当用户单击它时,他们应该收到警报消息。

如果在onResume方法中执行此操作,则当我打开通知时,我会在控制台上看到打印的消息和警报消息。
onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
    Alert(context: context, title: 'Hi User!').show();
}


然而,如果我尝试访问标题中的数据属性,我会看到控制台上打印的消息,但我现在没有看到任何提示

onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
    Alert(context: context, title: message['data']['user']['name']).show();
}

当应用程序在onMessage属性中运行时,同一段代码可以工作,但是对于onLaunchonResume,我看到了上述描述的行为。下面是来自控制台的日志记录:

W/awesome_projec(13005): Accessing hidden method Landroid/os/WorkSource;->add(I)Z (light greylist, reflection) 
W/awesome_projec(13005): Accessing hidden method Landroid/os/WorkSource;->add(ILjava/lang/String;)Z (light greylist, reflection) 
W/awesome_projec(13005): Accessing hidden method Landroid/os/WorkSource;->size()I (light greylist, reflection) 
W/awesome_projec(13005): Accessing hidden method Landroid/os/WorkSource;->get(I)I (light greylist, reflection) 
W/awesome_projec(13005): Accessing hidden method Landroid/os/WorkSource;->getName(I)Ljava/lang/String; (light greylist, reflection) 
E/FlutterFcmService(13005): Fatal: failed to find callback 
W/FirebaseMessaging(13005): Missing Default Notification Channel metadata in AndroidManifest. Default value will be used. 
E/FlutterFcmService(13005): Fatal: failed to find callback 
I/flutter (13005): onResume: {notification: {}, data: {collapse_key: com.example.awesome_project, google.original_priority: high, google.sent_time: 15751462256, google.delivered_priority: high, google.ttl: 2419200, from: 554610817622, location: {"latitude":24.6351,"longitude":70.2764}, user: {"phoneNumber":"1274545332","name":"Bobby94"}, google.message_id: 0:157514622564xxx}}

你是在 iPhone 还是 Android 上尝试过它? - dubace
@dubace 目前我只在 Android 上尝试。 - Dipanshu Juneja
@DipanshuJuneja 我已经点赞了这个问题。我也遇到了同样的问题。你找到解决方法了吗? - miloss
有人找到了这个问题的解决方案吗? - Roxx
你解决了这个问题吗?我想知道,因为我也遇到了同样的问题。 - gsm
3个回答

2
您需要在通知有效负载中添加新的键值click_action: 'FLUTTER_NOTIFICATION_CLICK',如下所示。
{
    notification: {
        title: 'Title',
        body: 'Body',
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
    }
}

在活动标签内的清单文件中添加以下代码:
  <intent-filter>
           <action android:name="FLUTTER_NOTIFICATION_CLICK" />
           <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

我已经有这个了。接收通知没有问题,只是警报没有显示出来。 - Dipanshu Juneja
@DipanshuJuneja 你在不同的设备上检查过这个吗? - Parth Rajani

0

在 firebaseMessaging 版本 ^4 中,

click_action 只能放在 data 中,不能再放在 notification 中了。如果你仍然把它放在 notification 中,你将无法跳转到想要的另一个页面。

{
notification: {
    title: 'Title',
    body: 'Body',
},
body :
{
 click_action :FLUTTER_NOTIFICATION_CLICK,
 message: message from firebase
}

}

0
一种工作方式是:将数据放入有效载荷中,例如:
"data": {
  "click_action": "FLUTTER_NOTIFICATION_CLICK",
  "id": "1",
  "status": "done",
  "message": "My Message",
  "title": "Meu Title"
}

请使用 ${message['data']['message']}' 而不是 ${message['notification']['body']}'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接