2012-12-22 24 views
5

Sto utilizzando GCM per inviare notifiche ai dispositivi Android.Invia notifica in lingua araba utilizzando GCM

Il codice che sto usando per ottenere il messaggio in GCMIntentService è come qui sotto:

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

E il codice che sto utilizzando in lato server per spingere o inviare quelli di notifica è il seguente:

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 

Quando ho inviato qualsiasi notifica in lingua inglese utilizzando il codice precedente l'ho ricevuto nel mio dispositivo senza alcun problema, ma quando ho inviato la notifica in lingua araba utilizzando il codice precedente non ho ricevuto nulla come messaggio che mi appare come vuoto sia in Logcat che nella notifica. L'API Android che sto utilizzando per sviluppare questa app è 16.

Quindi, come posso ottenere il messaggio scritto in arabo come notifica, allo stesso modo in cui ottengo quei messaggi quando inviati dall'inglese.

È il problema da ASP.Net Side o Android Side.

Qualsiasi aiuto o reindirizzamento sarà completamente apprezzato.

risposta

6

ho risolto il problema di cui sopra, che stavo affrontando per una settimana nel modo seguente:

il messaggio che ho inviato dal lato ASP.net che è rappresentato come TextBox1.Text collocato nel corpo della richiesta e si ha la necessità di essere URL codificato, dal momento che ho appena codificato il valore TextBox1.Text che risolvere il mio problema e lasciare che la mia app Android ha ricevuto la notifica in languge arabo:

ho solo cambiato il mio codice asp.net da questo:

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

Per essere come il seguente:

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

e mantenere il mio codice Android come suo.

+0

Si dovrebbe 'UrlEncode' tutto su http. (: –

+0

@Husam Funziona anche per PHP? – Mani

+0

@Husam, Posso inviare notifiche push da FCM in qualsiasi altra lingua? Voglio inviare una notifica nella mia lingua locale È possibile? – Kaveri

3

Il tuo problema sembra essere che le tue richieste non siano correttamente codificate. Google has an article in their Google Maps API che descrive come devono essere creati gli URL. In breve, le richieste dovrebbero essere codificate in UTF-8 (sebbene gli spazi possano essere +).

Un frammento:

Tutti i caratteri sia con codifica URL sono codificati utilizzando un carattere % e un valore esadecimale di due caratteri corrispondente al loro carattere UTF-8. Ad esempio, 上海 + 中國 in UTF-8 sarebbe codificato per URL come %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. La stringa ? and the Mysterians sarebbe codificata URL come %3F+and+the+Mysterians.

L'articolo punta a this Wikipedia article, dove è possibile trovare dettagli sulla codifica percentuale.

Il GCM architectural overview non menziona alcuna di quanto sopra, ma lo fa in particolare schema:

L'intestazione HTTP deve contenere le seguenti intestazioni:

  • Authorization: key=YOUR_API_KEY
  • Content-Type: application/json per JSON; application/x-www-form-urlencoded;charset=UTF-8 per testo normale.

Si consiglia di pensare di cambiare l'intestazione Content-Type per specificare charset=UTF-8 e codificare la richiesta di conseguenza. In alternativa, puoi provare a lasciare le tue richieste non codificate e a sperimentare altri set di caratteri, come ad esempio ISO-8859-6.

Problemi correlati