我正在尝试让我的应用程序在后台处理DATA有效负载。
"data": {
"aKey": "aValue",
"customtitle": "my title",
"custombody": "my body",
"customimage": "my image"
},
"notification": {
"title": "my title",
"text": "some text",
"icon": "icon to use",
"sound": "soundtouse"
}
根据 处理后台应用程序中的通知消息
下的documentation进行评估..数据有效负载是在启动器Activity的意图的附加内容中提供的。
在我的应用程序中,onMessageReceived
只会收到RemoteMessage
个对象。
我尝试覆盖onMessageReceived
签名以接受Intent
,但这不起作用。
除了文档中非常持久的句子外,我找不到任何教程或解释。
当有人在应用程序处于后台或关闭时,有人可以告诉我有关如何处理数据有效负载的示例吗?
如果应用程序已打开,则它会从我的onMessageReceived
(RemoteMessage)方法处理数据有效负载。
答案 0 :(得分:0)
您可以简单地使用Map来检索数据frm RemoteMessage对象。
public void onMessageReceived(RemoteMessage msg)
{
Log.d("Remote msg",msg.getData().toString());
try
{
Map<String, String> params = msg.getData();
JSONObject object = new JSONObject(params);
Log.d("Remote msg", object.toString());
}
}
<强>更新强> 仅当应用程序位于前台时,才会在onMessageReceived中接收通知消息。
在后台,应用程序在通知托盘中接收通知有效负载,并仅在用户点击通知时处理数据有效负载。 在前台时,您的应用会收到一个消息对象,其中包含两个可用的有效负载。 资料来源:https://firebase.google.com/docs/cloud-messaging/concept-options
解决方法:强> 看起来您正在使用通知和数据。您只能使用数据并调用onMessageReceived(),您应该触发自己的通知。 资源: https://medium.com/@Miqubel/mastering-firebase-notifications-36a3ffe57c41#.z1s28d59d
答案 1 :(得分:0)
您只遇到FCM的预期行为。在您关联的documentation中,该表显示在使用data
有效负载时,只会触发onMessageReceived()
,如果,则消息有效负载仅包含数据:
"data": {
"aKey": "aValue",
"customtitle": "my title",
"custombody": "my body",
"customimage": "my image"
}
但您在消息有效负载中同时使用notification
和data
。这意味着当您的应用处于后台时,有效负载将由Android系统自行处理,在通知托盘中显示notification
详细信息。
然后当用户点击关于该Android处理过的通知时,它应该打开您的应用(通常是MainActivity或您使用click_action
设置为打开的任何活动)并从那里,你应该像这样处理意图:
Intent intent = getIntent();
String pos = getIntent().getStringExtra("<YOUR KEY HERE>");
if(pos !=null){
selectDrawerItem(navigationView.getMenu().getItem(Integer.parseInt(pos)));
}