我使用 Firebase 消息传递来发送推送通知。我的安卓应用程序有一个小问题。在iOS版本中,当应用程序处于后台时,我可以在单击通知后轻松传递参数。
在Android版本中,当应用程序处于前台时,我可以拦截消息,但当应用程序在后台时则不能(我使用库com.google.firebase:firebase-messaging:17.3.4(:
我的安卓清单.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
当我单击通知时,它应该打开主活动,我希望有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获取参数,但此解决方案不起作用
我的主要活动.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: ....
我走的路对吗?谢谢
根据官方Firebase文档,您无法处理通知{}部分(您只能在清单中设置它的图标(,但这里有解决方案:通过data{}部分发送必要的数据。您现在可以使用MyFirebaseService处理它,并根据需要显示通知:数据将显示在remoteMessage.toIntent().getExtras()
中。 在您的情况下,请发送如下通知:
// ignore notification {}
data {
"type" : "message",
"id_message" : res
}
to: key
(不要将数据放入通知块( 如果你愿意,我可以编写发送和接收通知的工作代码