这是我的服务器端代码或android端代码。 此代码仅适用于英文消息。如果我使用Unicode章程,比如使用阿拉伯语,那么它就不会代替阿拉伯语。 由于英语阿拉伯语混合,它跳过了唯一的阿拉伯语章程。
请给我解决方案。 谢谢!
这是我的C#代码
private string SendNotification(string authstring, string id, string msg)
{
try
{
ServicePointManager.ServerCertificateValidationCallback = (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true;
WebRequest request = WebRequest.Create("https://android.googleapis.com/gcm/send");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
request.Headers.Add(string.Format("Authorization: key={0}", authstring));
string collaspeKey = Guid.NewGuid().ToString("n");
string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, msg, collaspeKey);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
catch (Exception ex)
{
throw ex;
}
}
这是我的Android端代码,可以捕捉到消息。
@Override
protected void onMessage(Context context, Intent intent) {
String message = ArabicUtilities.reshape(intent.getExtras().getString("payload"));
}
答案 0 :(得分:9)
André Oriani 对修复有一般的想法。即使消息放在请求的正文中,它仍然需要url编码。
string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, msg, collaspeKey);
应替换为
string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, HttpUtility.UrlEncode(msg), HttpUtility.UrlEncode(collaspeKey));
您需要添加对System.Web的引用才能使用HttpUtility。有关详细信息,请参阅URL Encoding using C#。
答案 1 :(得分:2)
您是否考虑过使用base64对通过GCM发送的字符串进行编码?这样您就可以删除所有编码问题。
答案 2 :(得分:2)
以下是在Java中为我解决的问题:
在服务器端:
encodedMessage = URLEncoder.encode(message, "UTF-8");
在应用中:
decodedMessage = URLDecoder.decode(message, "UTF-8");