当app是后台FCM时,如何检索通知消息intent.getExtras()

may*_*kar 10 android firebase firebase-cloud-messaging firebase-notifications

我正在使用FCM进行简单通知

当应用程序处于前台时,一切正常.我收到通知以及onMessageReceived方法内的数据消息.

但是当应用程序处于后台时,我会在系统托盘中收到通知.当我点击控件时,它会转到主要活动.当我分析intent.getExtras();,我只得到这个关键的数据- ,google.sent_time,from,.google.message_idcollapse_key

如何获取系统托盘中可见的通知消息标题和消息intent.getExtras()

我正在使用FCM控制台发送通知我没有我的专用服务器来执行此操作.

接收邮件的代码:

final Bundle extras = intent.getExtras(); 
final Set<String> keySet = extras.keySet(); 
final Iterator<String> iterator = keySet.iterator(); 
while (iterator.hasNext()) {     
    final String key = iterator.next(); 
    final Object o = extras.get(key); 
    System.out.println(key + ":" + o); 
} 
Run Code Online (Sandbox Code Playgroud)

AL.*_*AL. 12

处理Android FCM文档的消息中所示,如果您发送的有效负载同时包含通知和数据,则将单独处理.通知部分将由通知托盘处理,而数据部分将在意图的附加部分中处理.

AFAIK,当应用程序处于后台时,无法获取通知有效负载(始终由通知托盘处理).但是,您可以做的是将自定义键值对添加到数据有效负载中,如下所示:

{
"data": {
      "notification_title": "title here",
      "notification_message": "message here"
     }
}
Run Code Online (Sandbox Code Playgroud)

当然,您必须确保数据值notification_titlenotification_message通知有效负载中设置的数据值相同.然后就像往常一样从Intent extras中检索它.


小智 6

当您的应用处于后台或被终止时,Firebase Notfication 将表现为数据消息。在这些场景中,如果你想检索你的通知消息,那么你必须在下面的键值对中定义它

FCM 控制台的高级选项

在此处输入图片说明

然后在您的活动中使用此检索此消息,该活动将通过点击通知打开。

 if (getIntent().getExtras() != null) {
        Object value ;
        for (String key : getIntent().getExtras().keySet()) {
            if(key.equals("Message Key")) {
                 value = getIntent().getExtras().get(key); // value will represend your message body... Enjoy It
                 Log.d("NotificationTag" , key+"____" + value);
                }
          }
   } 
Run Code Online (Sandbox Code Playgroud)