2012-12-22 13 views
5

Używam GCM do wysyłania powiadomień na urządzenia z Androidem.Wysyłanie powiadomień w języku arabskim za pomocą GCM

Kod, który używam, aby uzyskać wiadomość w GCMIntentService jest jak poniżej:

@Override 
    protected void onMessage(Context ctx, Intent intent) { 
     // TODO Auto-generated method stub 
     String j =intent.getStringExtra("message"); 
     generateNotification(ctx, j); 
    } 

I kod, który używam na stronie serwera do pchania lub wysłać te powiadomienie jest jak poniżej:

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 

Kiedy wysłałem dowolne powiadomienie w języku angielskim, używając powyższego kodu, otrzymałem go w moim urządzeniu bez problemu, ale kiedy wysłałem powiadomienie w języku arabskim, używając powyższego kodu, nic nie dostałem jako wiadomość, która wydaje mi się puste zarówno w Logcat, jak i w powiadomieniu. Android API, którego używam do rozwijania tej aplikacji, to: 16.

Jak mogę otrzymać wiadomość napisaną w języku arabskim jako powiadomienie, w taki sam sposób, w jaki otrzymuję te wiadomości po wysłaniu przez angielski.

Czy problem występuje po stronie ASP.Net lub stronie Androida.

Każda pomoc lub przekierowanie zostanie całkowicie docenione.

Odpowiedz

6

I rozwiązać powyższy problem, który miałem z widokiem na jeden tydzień, wykonując następujące czynności:

wiadomość, że wysłałem ze strony ASP.net który jest reprezentowany jako TextBox1.Text umieszczonego w korpusie wniosek i musi być zakodowany w adresie URL, ponieważ po prostu zakodowane wartości TextBox1.Text który rozwiąże mój problem i niech moja android aplikacja otrzymała zawiadomienie w arabskiej languge:

ja tylko zmieniłem asp.net kod z tego:

Dim postdata As String = "registration_id=" + regid(i) + "&data.message=" + TextBox1.Text + "&collapse_key=" + collapsKey 

Aby być podobnym do następującego:

Dim postdata As String = "registration_id=" + regid(i) + "&data.message=" + HttpUtility.UrlEncode(TextBox1.Text) + "&collapse_key=" + collapsKey 

i zachowaj mój kod Androida jako jego.

+0

Powinieneś "UrlEncode' wszystko nad http. (: –

+0

@Husam Czy to też działa dla PHP? – Mani

+0

@Husam, Czy mogę wysłać powiadomienie push z FCM w jakimkolwiek innym języku? Chcę wysłać powiadomienie w moim lokalnym języku Czy to możliwe? – Kaveri

3

Twoim problemem wydaje się być to, że twoje żądania nie są poprawnie zakodowane. Google has an article in their Google Maps API określa sposób budowania adresów URL. W skrócie, żądania powinny być kodowane w UTF-8 (chociaż spacje mogą być +).

fragment:

Wszystkie znaki mają być zakodowane URL są kodowane za pomocą % charakter i wartość hex dwóch znaków odpowiadający ich UTF-8 znaku. Na przykład 上海 + 中國 w UTF-8 będzie zakodowany w postaci adresu URL jako %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. Łańcuch ? and the Mysterians będzie kodowany przez URL jako %3F+and+the+Mysterians.

Artykuł ten wskazuje na this Wikipedia article, gdzie można znaleźć szczegółowe informacje na temat kodowania procentowego.

GCM architectural overview nie wspomina o żadnej z powyższych, ale nie konkretnie przedstawić:

Nagłówek HTTP musi zawierać następujące nagłówki:

  • Authorization: key=YOUR_API_KEY
  • Content-Type: application/json dla JSON; application/x-www-form-urlencoded;charset=UTF-8 dla zwykłego tekstu.

Możesz rozważyć zmianę nagłówka Content-Type określić charset=UTF-8 i zakodować swój wniosek odpowiednio. Możesz też spróbować pozostawić swoje żądania bez szyfrowania i eksperymentować z innymi zestawami znaków, takimi jak ISO-8859-6.

Powiązane problemy