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

时间:2017-01-04 07:26:45

标签: android firebase firebase-cloud-messaging firebase-notifications

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

当应用程序处于前台时,一切正常。我在onMessageReceived方法中收到通知和数据消息。

但是当app在后台时,我会在系统托盘中收到通知。当我点击控件时,它会转到主要活动。当我解析intent.getExtras();时,我只收到了这些关键数据 - google.sent_timefromgoogle.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); 
} 

3 个答案:

答案 0 :(得分:12)

Handling Messages for Android FCM docs所示,如果您发送的有效负载同时包含通知和数据,则会单独处理。通知部分将由通知托盘处理,而数据部分将在意图的附加部分中。

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

{
"data": {
      "notification_title": "title here",
      "notification_message": "message here"
     }
}

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

答案 1 :(得分:3)

当您的应用处于后台或被杀时,Firebase Notfication将充当数据消息。在这些方案中,如果要检索通知消息,则必须在

下的键值对中定义它

FCM控制台的高级选项

enter image description here

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

 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);
                }
          }
   } 

答案 2 :(得分:0)

只需覆盖FirebaseMessagingService .class的handleIntent()方法,它将在前台和后台模式下调用,此处您可以获取并解析通知密钥和有效负载数据

public void handleIntent(Intent intent)
    {
    String title = bundle.getString("gcm.notification.title");
     String body = bundle.getString("gcm.notification.body");
    }

注意:它适用于游戏服务11