我正在尝试使用Firebase云消息传递向Android设备发送推送通知。
JSON消息不起作用,我收到400响应:
{ “到”: “cXE06Grz67M:APA91bHoOc7pUPqKc9SMgCMKwH2s0r2zAyMac-LVjZVJiRLKSHCPVzi1K1tHmwq_Z35u8i32XL-cQKHGSWvzjD6ItvaMZh-LpRLHaz0iPQTMV-yQ6sqEHBjUvYkN3BDM4ftFowUs_L2p”, “数据”: “{\” PushMessage \ “:\” 11 \ “}”}
导致问题的是“数据”部分。
以下内容 - 没有“数据”部分 - 有效且我得到200回复:
“以”: “cXE06Grz67M:APA91bHoOc7pUPqKc9SMgCMKwH2s0r2zAyMac-LVjZVJiRLKSHCPVzi1K1tHmwq_Z35u8i32XL-cQKHGSWvzjD6ItvaMZh-LpRLHaz0iPQTMV-yQ6sqEHBjUvYkN3BDM4ftFowUs_L2p”}
JSON格式有什么问题?我该如何解决?
具体来说,“数据”部分是从(服务器端代码是Java)生成的:
HashMap<String, String> dataMessages = new HashMap<>();
dataMessages.put("PushMessage", Integer.toString(pushMessage));
...
Type stringStringMap = new TypeToken<Map<String, String>>() {
}.getType();
Gson gson = new Gson();
String dataMessageString = gson.toJson(dataMessages, stringStringMap);
...
JsonObject jsonObject = new JsonObject();
...
jsonObject.addProperty("data", dataMessageString);
...
答案 0 :(得分:1)
您可能已经发现邮件的data
部分无效JSON。 Gson转换正在添加额外的引号和反斜杠:
"data":"{\"PushMessage\":\"11\"}"
应该是:
"data": {"PushMessage":"11"}
我对Gson不是很有经验。下面显示的修改似乎产生了所需的格式。可能有更好的方法。
HashMap<String, String> dataMessages = new HashMap<>();
dataMessages.put("PushMessage", Integer.toString(pushMessage));
...
Type stringStringMap = new TypeToken<Map<String, String>>() {
}.getType();
Gson gson = new Gson();
//String dataMessageString = gson.toJson(dataMessages, stringStringMap);
JsonElement dataElement = gson.toJsonTree(dataMessages, stringStringMap); //ADDED
...
JsonObject jsonObject = new JsonObject();
...
jsonObject.add("data", dataElement); //CHANGED
Log.d(TAG, "gsonTest: " + jsonObject.toString()); //DEBUG
...