我使用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: ....
我遵循正确的道路吗?谢谢
答案 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()
(不要将数据放入通知块) 如果需要,我可以编写发送和接收通知的工作代码