Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用GCM以阿拉伯语发送通知_Android_Asp.net_Google Cloud Messaging - Fatal编程技术网

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

Android 使用GCM以阿拉伯语发送通知,android,asp.net,google-cloud-messaging,Android,Asp.net,Google Cloud Messaging,我正在使用GCM向android设备发送通知 我用于在GCMinentService中获取消息的代码如下: @Override protected void onMessage(Context ctx, Intent intent) { // TODO Auto-generated method stub String j =intent.getStringExtra("message"); generateNotification(ctx

我正在使用GCM向android设备发送通知

我用于在GCMinentService中获取消息的代码如下:

@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
我在服务器端用来推送或发送这些通知的代码如下:

@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和notification中都显示为空。我用来开发这个应用程序的android API是16

那么,我怎样才能得到用阿拉伯语写的信息作为通知,就像我用英语发送这些信息一样

是ASP.Net端还是android端的问题


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

我通过以下操作解决了我一周来面临的上述问题:

Dim postdata As String = "registration_id=" + regid(i) + "&data.message=" + HttpUtility.UrlEncode(TextBox1.Text) + "&collapse_key=" + collapsKey
我从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代码不变。

您的问题似乎是您的请求没有正确编码。谷歌概述了如何构建URL。简而言之,请求应该是UTF-8编码的(尽管空格可能是
+

片段:

所有要进行URL编码的字符都使用
%
字符和对应于其UTF-8字符的两字符十六进制值进行编码。例如上海+中國 UTF-8中的URL编码为
%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
。字符串
?神秘人
的URL编码为
%3F+和+神秘人

这篇文章指向,在那里可以找到有关百分比编码的详细信息

报告没有提到上述任何一项,但具体概述了:

HTTP标头必须包含以下标头:

  • Authorization:key=您的API密钥
  • 内容类型:应用程序/json
    用于json<代码>应用程序/x-www-form-urlencoded;字符集=UTF-8用于纯文本

您可能需要考虑更改<代码>内容类型< /Cult>标头,以指定<代码>字符集= UTF-8<代码>,并相应地编码您的请求。或者,您可以尝试将请求保留为未编码状态,并尝试使用其他字符集,例如。

@Husam,我可以用任何其他语言从FCM发送推送通知吗?我想用我的本地语言发送通知。可能吗?