9

これは私のサーバー側コードまたは Android 側コードです。このコードは、英語のメッセージに対してのみ正常に機能します。アラビア語を使用するような Unicode 憲章を使用すると、アラビア語の代わりに何も表示されません。英語のアラビア語が混在しているため、アラビア語のチャーターのみをスキップします。

解決策を教えてください。ありがとう!

これは私のC#コードです

private string SendNotification(string authstring, string id, string msg)
    {
        try
        {
            ServicePointManager.ServerCertificateValidationCallback = (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true;
            WebRequest request = WebRequest.Create("https://android.googleapis.com/gcm/send");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";

            request.Headers.Add(string.Format("Authorization: key={0}", authstring));
            string collaspeKey = Guid.NewGuid().ToString("n");
            string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, msg, collaspeKey);
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            WebResponse response = request.GetResponse();
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

これは、メッセージをキャッチする Android 側のコードです。

@Override
protected void onMessage(Context context, Intent intent) {        
    String message = ArabicUtilities.reshape(intent.getExtras().getString("payload"));
}
4

3 に答える 3

9

AndréOriani は、修正の一般的な考え方を持っています。メッセージはリクエストの本文に配置されますが、URLエンコードする必要があります。

string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, msg, collaspeKey);

に置き換える必要があります

string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, HttpUtility.UrlEncode(msg), HttpUtility.UrlEncode(collaspeKey));

HttpUtilityを使用するには、System.Webへの参照を追加する必要があります。詳細については、C#を使用したURLエンコードを参照してください。

于 2012-09-06T21:24:50.257 に答える
2

GCM 経由で送信される文字列をエンコードするために base64 を使用することを検討しましたか? このようにして、すべてのエンコーディングの問題を取り除きます。

于 2012-08-09T09:47:37.517 に答える