Flutter - 如何使用 FCM onResume 和 onLaunch 方法?

Posted

技术标签:

【中文标题】Flutter - 如何使用 FCM onResume 和 onLaunch 方法?【英文标题】:Flutter - How to work with FCM onResume and onLaunch methods? 【发布时间】:2020-03-25 23:10:15 【问题描述】:

我的问题似乎与firebase_messaging onResume and onLaunch not working 类似,但是我认为该解决方案对我不起作用,因为我已经在尝试访问 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 目前我只在 Android 上尝试 @DipanshuJuneja 我赞成这个问题。这里同样的问题。你找到解决办法了吗? 有人找到解决办法了吗? 你解决了我想知道的这个问题,因为我有同样的问题吗? 【参考方案1】:

一种工作方式是: 在payload中放入数据例如:

"data": 
  "click_action": "FLUTTER_NOTIFICATION_CLICK",
  "id": "1",
  "status": "done",
  "message": "My Message",
  "title": "Meu Title"

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

【讨论】:

【参考方案2】:

在 firebaseMessaging 版本 ^4 中,

click_action 只放入数据,不再在通知中。如果你还是把它放在通知里,你就不能去你想要的另一个页面,


notification: 
    title: 'Title',
    body: 'Body',
,
body :

 click_action :FLUTTER_NOTIFICATION_CLICK,
 message: message from firebase



【讨论】:

【参考方案3】:

您必须在通知负载中添加新的键值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>

【讨论】:

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

以上是关于Flutter - 如何使用 FCM onResume 和 onLaunch 方法?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何使用 FCM onResume 和 onLaunch 方法?

Flutter:如何在 Flutter 中为 Firebase (FCM) 注册令牌订阅ToTopic

当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃

currentuser 如何在flutter中通过fcm向另一个用户发送请求通知?

如何获取 FCM-Django 推送通知的 registration_id (flutter app)