5

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

任何帮助或重定向将不胜感激。

4

2 回答 2

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代码。

于 2012-12-27T00:21:45.787 回答
3

您的问题似乎是您的请求未正确编码。Google在其 Google Maps API 中有一篇文章概述了应该如何构建 URL。简而言之,请求应该是 UTF-8 编码的(尽管空格可能是+)。

一个片段:

所有要进行 URL 编码的字符都使用一个%字符和一个与它们的 UTF-8 字符相对应的两个字符的十六进制值进行编码。例如,UTF-8 中的上海+中国将被 URL 编码为%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. 该字符串? and the Mysterians将被 URL 编码为%3F+and+the+Mysterians.

该文章指向此 Wikipedia 文章,其中可以找到有关百分比编码的详细信息。

GCM 架构概述没有提到上述任何内容,但它确实特别概述了:

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

于 2012-12-31T17:56:33.983 回答