我正在实施Firebase推送通知。我正在使用remoteMessage.getData()
获取推送通知。我在for循环中使用Map.Entry来获取数据。如图所示,我将键和值对作为:
key:body,value:{JSON Object}; key:title,value:Placebid。
我想要的是用字符串"标题"获取密钥。并检查它的" Placebid"如果是,则获取密钥" body"的值。它有JSON。如何在for循环中执行此操作?我试过但没有得到JSON的价值。
//onMessageReceived
if(remoteMessage.getData().size() > 0){
try {
System.out.println("sammy_getData "+remoteMessage.getData());
for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
Log.d("sammy_ ", "key: " + key + "\n value: " + value);
System.out.println("sammy_key: "+key+"\n value: "+value);
if(key.contains("title") && value.contains("Placebid")){
JSONObject obj = new JSONObject(value);
String jobid = obj.getString("job_id");
String username = obj.getString("username");
String msg = "bided on your job.";
String msgbody = username + " " + msg;
sendnotificationbid(jobid,msgbody);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
//Push notification format
{
body={
"image": "<Image link>",
"job_id": "1349",
"id": 121,
"message": "New Message Received",
"type": "Placebid",
"username": "User1234"
},
title=Placebid
}
答案 0 :(得分:0)
由于您的title=Placebid
通知格式位于正文标记之外,因此当您调用remoteMessage.getData()
时,它会返回仅在正文<内的数据地图/ strong>标签。
如果你的通知格式改变如下(在标题内移动title = placebid),它将起作用。
//Push notification format
{
data:{
"image": "<Image link>",
"job_id": "1349",
"id": 121,
"message": "New Message Received",
"type": "Placebid",
"username": "User1234"
"title":"Placebid"
}
}
当你知道你要找的钥匙是“标题”时,不需要循环。使用map中的键直接获取值,并检查它是否等于“Placebid”。
修改强> 通知数据json应该如下面的示例json而且键不是 body ,它是数据。
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"data" : {
"image": "<Image link>",
"job_id": "1349",
"id": 121,
"message": "New Message Received",
"type": "Placebid",
"username": "User1234"
"title":"Placebid"
}
}