使用GCM发送阿拉伯语通知

5

我正在使用GCM向安卓设备发送通知。

我使用的代码在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端呢?
非常感谢您的任何帮助或指引。
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代码不变。

@Husam, 我能否从FCM发送其他语言的推送通知? 我想要用本地语言发送通知。 这是可能的吗? - Kaveri

3
你的问题似乎是请求没有正确编码。Google 在其Google Maps API中有一篇文章,阐述了URL应该如何构建。简而言之,请求应该采用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

该文章指向此维基百科文章,其中包含有关百分号编码的详细信息。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接