使用 GCM 从 java 服务器向 android 手机发送希伯来语推送通知时出现乱码
Posted
技术标签:
【中文标题】使用 GCM 从 java 服务器向 android 手机发送希伯来语推送通知时出现乱码【英文标题】:Getting gibberish when sending push notification in Hebrew from java server to android phone using GCM 【发布时间】:2012-07-06 18:26:22 【问题描述】:我正在使用应用程序引擎使用 Google Cloud Messaging 将希伯来语推送通知发送到智能手机,但是当我在手机上收到消息时,文本是 ???????而不是希伯来语。
这里是使用 JSON 对象准备发布消息到手机的代码:
JSONObject obj=new JSONObject();
JSONArray registrationsIDList = new JSONArray();
Query newsQuery = new Query("Devices");
List<Entity> results = datastore.prepare(newsQuery).asList(
FetchOptions.Builder.withDefaults());
if(results!=null)
for(int j=0;j<results.size();j++)
Entity entity=results.get(j);
if(entity!=null)
String ID=(String) entity.getProperty("Registration ID");
if(ID!=null)
registrationsIDList.put(ID);
LinkedHashMap data = new LinkedHashMap();
data.put("Subject",subjects.get(i).getSubject());
data.put("Writer", subjects.get(i).getWriter());
data.put("SubjectDate", subjects.get(i).getLastCommentDateTime());
data.put("SubjectLink", subjects.get(i).getSubjectLink());
try
obj.put("registration_ids", registrationsIDList);
obj.put("data", data);
catch (JSONException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
//Sending message to GCM for devices
try
URL url = new URL("https://android.googleapis.com/gcm/send");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json ; charset=utf-8");
connection.setRequestProperty("Authorization", "key=*************************************");
OutputStream writer = connection.getOutputStream();
Entity tmp=new Entity("JSON");
tmp.setProperty("Message", obj.toString());
datastore.put(tmp);
writer.write(obj.toString().getBytes());
writer.close();
Entity device=new Entity("Messages Results");
device.setProperty("Response Code", connection.getResponseCode());
device.setProperty("Response Message", connection.getResponseMessage());
datastore.put(device);
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK)
else
// Server returned HTTP error code.
catch (MalformedURLException ex)
// ...
catch (IOException ex)
// ...
在发送消息之前,我检查了 JSON 对象是否包含正确的希伯来语文本。
这里是手机接收短信的代码:
@Override
protected void onMessage(Context arg0, Intent arg1)
Log.d("GCM", "RECIEVED A MESSAGE");
String str = arg1.getExtras().getString("Subject");
Log.d("GCM", str);
String str1 =arg1.getExtras().getString("Writer");
Log.d("GCM", str1);
String str2 =arg1.getExtras().getString("SubjectDate");
Log.d("GCM", str2);
String str3 =arg1.getExtras().getString("SubjectLink");
Log.d("GCM", str3);
现在文本是 ???????????????????而不是希伯来语。 任何建议将不胜感激。
【问题讨论】:
您的代码帮助我了解了在客户端收到推送通知时如何从服务器读取 Json 响应。非常感谢亚历克斯。 【参考方案1】:您需要使用 Unicode:.toString.getBytes("UTF8")
【讨论】:
Alex 我也有同样的问题!!寻找几个小时..你能发布一个工作示例吗?谢谢!以上是关于使用 GCM 从 java 服务器向 android 手机发送希伯来语推送通知时出现乱码的主要内容,如果未能解决你的问题,请参考以下文章
如何从应用服务器向 GCM 服务器发送发送重新注册请求以注册设备?
java中的XMPP服务器没有收到来自GCM服务器的所有消息
GCM:如何从服务器向应用程序发送消息(丢失注册 ID、通知 ID ...)