使用 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服务器的所有消息

使用自定义声音向 android 发送 GCM 推送通知

GCM:如何从服务器向应用程序发送消息(丢失注册 ID、通知 ID ...)

如何通过xmpp gcm将ack从android应用程序发送到服务器

如何使用 GCM 和 java 向多个设备发送推送通知