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で空白として表示されるメッセージとして何も表示されませんでしたと通知。このアプリの開発に使用しているAndroidAPIは16です。

では、英語で送信されたときにメッセージを受け取るのと同じ方法で、アラビア語で書かれたメッセージを通知として受け取るにはどうすればよいですか。

ASP.Net側またはAndroid側からの問題です。

ヘルプやリダイレクトは完全にありがたいです。

4

2 に答える 2

6

以下を実行することで、1週間直面していた上記の問題を解決しました。

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

私のアンドロイドコードをそのままにしておいてください。

于 2012-12-27T00:21:45.787 に答える
3

あなたの問題は、リクエストが適切にエンコードされていないことです。Googleの Google Maps API には、 URL の作成方法を概説した記事があります。つまり、リクエストは UTF-8 でエンコードする必要があります (ただし、スペースは+.

スニペット:

URL エンコードされるすべての文字は%、UTF-8 文字に対応する文字と 2 文字の 16 進数値を使用してエンコードされます。たとえば、UTF-8 の上海+中國は、次のように URL エンコードされ%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8Bます。文字列? and the Mysteriansは として URL エンコードされ%3F+and+the+Mysteriansます。

この記事は、このウィキペディアの記事 を指しています。ここには、パーセント エンコーディングの詳細が記載されています。

GCM アーキテクチャの概要では、上記のいずれについても言及されていませんが、具体的には次のように概説されています。

HTTP ヘッダーには、次のヘッダーが含まれている必要があります。

  • Authorization: key=YOUR_API_KEY
  • Content-Type: application/jsonJSON の場合。application/x-www-form-urlencoded;charset=UTF-8プレーンテキスト用。

Content-Typeヘッダーを変更して、charset=UTF-8それに応じてリクエストを指定およびエンコードすることを検討することをお勧めします。または、リクエストをエンコードせずに残し、 ISO-8859-6などの他の文字セットを試すこともできます。

于 2012-12-31T17:56:33.983 に答える