use*_*513 1 android push-notification android-intent google-cloud-messaging
我正在尝试发送和接收JSON GCM消息,但在客户端上它似乎总是以UTF8形式出现.
protected HttpURLConnection post(String url, String contentType, String body)
throws IOException {
Print.logInfo("In HttpURLConnection: " + contentType + body);
byte[] bytes = body.getBytes();
HttpURLConnection conn = getConnection(url);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setFixedLengthStreamingMode(bytes.length);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", contentType);
conn.setRequestProperty("Authorization", "key=" + key);
OutputStream out = conn.getOutputStream();
out.write(bytes);
out.close();
return conn;
}
Run Code Online (Sandbox Code Playgroud)
在服务器上,UTF8消息是:在HttpURLConnection中:application/x-www-form-urlencoded; charset = UTF-8registration_id = APA91 ...&delay_while_idle = 0&collapse_key = Test&time_to_live = 2419200&data.Data1 = Value + 1&data.Data2 = Value + 2&data .Data3 =值+ 3
并且JSON消息是:在HttpURLConnection中:application/json {"delay_while_idle":false,"collapse_key":"Test","data":{"Data1":"Value 1","Data2":"Value 2", "Data3":"Value 3"},"time_to_live":2419200,"registration_ids":["APA91 ..."]}
使用多播结果MulticastResult(multicast_id = 5036 ...,total = 1,success = 1,failure = 0,canonical_ids = 0,results:[[messageId = 0:1362 ..]]:
两个消息都在客户端上成功接收,但我无法识别json格式.
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
String inAction = intent.getAction();
// check to see if it is a message
if (inAction.equals("com.google.android.c2dm.intent.RECEIVE")) {
// if your key/value is a JSON string, extract and parse it using JSONObject
String json_info = intent.getExtras().getString("data");
if (json_info != null) {
try {
JSONObject jsonObj = new JSONObject(json_info);
payload = jsonObj.get("Data1") + "\n"
+ jsonObj.get("Data2")+ "\n"
+ jsonObj.get("Data3");
}
catch (JSONException e) {
// do nothing
return;
}
}
else {
payload = intent.getStringExtra("Data1") + "\n"
+ intent.getStringExtra("Data2")+ "\n"
+ intent.getStringExtra("Data3");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在两种情况下,json_info都为null.我在运行apache/tomcat的服务器上使用java servlet.
请帮忙.非常感谢
JSON对象仅用于服务器与GCM服务器的通信.该应用程序永远不会获得JSON对象.通知的数据作为键/值对传递.如果由于某种原因要传递JSON有效负载,则应将其编码为String,并将该String作为dataJSON对象中其中一个键/值对的值传递.然后你必须从intent中的extras中读取该值并解析JSON.
onMessage(上下文上下文,意图意图):当服务器向GCM发送消息时调用,GCM将其传递给设备.如果消息具有有效负载,则其内容在intent中作为附加项可用.
实际上这个引用更相关:
数据
一个JSON对象,其字段表示消息的有效负载数据的键值对.如果存在,有效载荷数据将作为应用程序数据包含在Intent中,其中键是额外的名称.例如,"data":{"score":"3x1"}将导致意图额外命名得分,其值为字符串3x1.虽然对消息的总大小(4kb)有限制,但对键/值对的数量没有限制.值可以是任何JSON对象,但我们建议使用字符串,因为无论如何,值都将转换为GCM服务器中的字符串.如果要包含对象或其他非字符串数据类型(例如整数或布尔值),则必须自行转换为字符串.另请注意,密钥不能是保留字(来自或以谷歌开头的任何单词).为了使事情略微复杂化,有一些保留字(例如collapse_key)在技术上允许在有效载荷数据中.但是,如果请求还包含该单词,则请求中的值将覆盖有效负载数据中的值.因此,建议不要使用在此表中定义为字段名称的单词,即使在技术上允许的情况下也是如此.可选的.
| 归档时间: |
|
| 查看次数: |
2624 次 |
| 最近记录: |