Android 使用GCM以阿拉伯语发送通知
我正在使用GCM向android设备发送通知 我用于在GCMinentService中获取消息的代码如下: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
@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<代码>应用程序/x-www-form-urlencoded;字符集=UTF-8用于纯文本内容类型:应用程序/json
您可能需要考虑更改<代码>内容类型< /Cult>标头,以指定<代码>字符集= UTF-8<代码>,并相应地编码您的请求。或者,您可以尝试将请求保留为未编码状态,并尝试使用其他字符集,例如。
@Husam,我可以用任何其他语言从FCM发送推送通知吗?我想用我的本地语言发送通知。可能吗?