使用GCM以阿拉伯语发送通知

时间:2012-12-22 17:29:12

标签: android asp.net google-cloud-messaging

我正在使用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的问题。

完全赞赏任何帮助或重定向。

2 个答案:

答案 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