Firebase消息,后台的Android应用程序在单击消息后无法拦截推送通知

时间:2018-10-20 09:48:21

标签: android firebase push-notification firebase-cloud-messaging

我使用Firebase消息发送推送通知。我的Android应用程序有一个小问题。在iOS版本中,当应用程序在后台运行时,单击通知后,我可以轻松地传递参数。

在Android版本中,我可以在应用程序处于前台时拦截消息,但不能在应用程序处于后台时拦截消息(我使用库com.google.firebase:firebase-messaging:17.3.4):

我的AndroidManifest.xml

<activity android:name=".MainActivity"
        android:screenOrientation="portrait"
        >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="OPEN_NOTIFY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
....
<service
        android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

我的通知有效载荷:

notification:{
 title: "mytitle",
 text: "MYTEXT",
 "data":{
   "type" : "message",
   "id_message" : res
  },
  "click_action" : "OPEN_NOTIFY"
},to: token

当我单击通知时,它应该打开MainActivity,并且我想获得id_message

我的MyFirebaseMessagingService.java

 @Override
public void onMessageReceived(RemoteMessage remoteMessage){

    //never enters if the app is in background

    if(remoteMessage.getNotification() != null){
       //I READ NOTIFY WHEN APP IS IN FOREGROUND
    }
}

我尝试直接从Inten获取参数,但是此解决方案不起作用

我的MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
   ....
   if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            Object value = getIntent().getExtras().get(key);
            Log.d(TAG, "Key: " + key + " Value: " + value);
        }
    }
   ....
}

我无法拦截我的通知:

输出:

Key: google.sent_time Value: 1540026384768
Key: google.ttl Value: 2419200
Key: from Value: 635549396240
Key: google.message_id Value: 0:1540026384773623%6b8fed3d6b8fed3d
Key: collapse_key Value: ....

我遵循正确的道路吗?谢谢

1 个答案:

答案 0 :(得分:0)

根据official Firebase docs,您不能处理通知的通知{}部分(只能在清单中设置它的图标),但是这里的解决方案是:通过数据{}部分发送必要的数据。现在,您可以使用MyFirebaseService进行处理,并根据需要显示通知:数据将显示在1 counter value is 1 1 counter value is 2 1 counter value is 3 2 counter value is 4 2 counter value is 5 2 counter value is 6 中。 对于您的情况,请发送如下通知:

remoteMessage.toIntent().getExtras()

(不要将数据放入通知块) 如果需要,我可以编写发送和接收通知的工作代码