我正在使用GCM向Android设备发送通知。
我用来在GCMIntentService中获取消息的代码如下:
@Override
protected void onMessage(Context ctx, Intent intent) {
// TODO Auto-generated method stub
String j =intent.getStringExtra("message");
generateNotification(ctx, j);
}
我在服务器端用来推送或发送这些通知的代码如下:
Dim request As WebRequest = WebRequest.Create("https://android.googleapis.com/gcm/send")
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
request.Headers.Add("Authorization: key=AIzaSyA47-XMaePL1mmI0P1yQ9V4sntMVn9q-1o")
request.Headers.Add("Sender: id=648406549877")
Dim collapsKey = Guid.NewGuid.ToString("n")
Dim postdata As String = "registration_id=" + regid_String_reveived_from_device_after_registering_with_GCM + "&data.message=" + TextBox1.Text + "&collapse_key=" + collapsKey
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postdata)
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim resposne As WebResponse = request.GetResponse
Dim dataresponse As Stream = resposne.GetResponseStream
Dim reader As New StreamReader(dataresponse)
Dim sResponseFromServer As String = reader.ReadToEnd
Label2.Text = sResponseFromServer
reader.Close()
dataresponse.Close()
resposne.Close
当我使用上述代码发送任何英语语言通知时,我在我的设备中收到它没有任何问题,但当我使用上述代码发送阿拉伯语通知时,我没有得到任何消息,在我看来是空白在Logcat和通知中。我用来开发这个应用程序的android API是16。
那么我怎样才能得到用阿拉伯语写成通知的消息,就像我用英语发送这些消息一样。
来自ASP.Net Side或android Side的问题。
完全赞赏任何帮助或重定向。
答案 0 :(得分:6)
我通过以下方式解决了我面临的上述问题一周:
我从ASP.net端发送的消息,表示为TextBox1.Text
放置在请求的正文中,并且需要进行URL编码,因为我只编码了TextBox1.Text
值来解决我的问题,让我的Android应用程序收到阿拉伯语语言通知:
我只改变了我的asp.net代码:
Dim postdata As String = "registration_id=" + regid(i) + "&data.message=" + TextBox1.Text + "&collapse_key=" + collapsKey
如下所示:
Dim postdata As String = "registration_id=" + regid(i) + "&data.message=" + HttpUtility.UrlEncode(TextBox1.Text) + "&collapse_key=" + collapsKey
并保持我的Android代码为。
答案 1 :(得分:3)
您的问题似乎是您的请求未正确编码。 Google has an article in their Google Maps API概述了如何构建网址。简而言之,请求应该是UTF-8编码的(尽管空格可能是+
)。
摘录:
所有要进行URL编码的字符都使用
%
字符和与其UTF-8字符对应的双字符十六进制值进行编码。例如,UTF-8中的上海+中国将被编码为%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
。字符串? and the Mysterians
将被编码为%3F+and+the+Mysterians
。
文章指向this Wikipedia article,其中可以找到有关百分比编码的详细信息。
GCM architectural overview未提及上述任何内容,但具体概述:
HTTP标头必须包含以下标头:
Authorization: key=YOUR_API_KEY
Content-Type: application/json
用于JSON;application/x-www-form-urlencoded;charset=UTF-8
用于纯文本。
您可能需要考虑更改Content-Type
标头以指定charset=UTF-8
并相应地对您的请求进行编码。或者,您可以尝试不加编码请求并尝试使用其他字符集,例如ISO-8859-6。