10

Ho una singola applicazione Android, che supporta 7 paesi (localizzazione e internazionalizzazione). La funzionalità e la lingua dell'applicazione sono cambiate in base alle impostazioni locali del dispositivo. Ho bisogno di implementare le notifiche push GCM per questa applicazione. Requisito:Notifica push GCM Android per applicazione di localizzazione

  • È possibile inviare la notifica push in 7 lingue diverse con un singolo account GCM.
  • Esiste un modo per visualizzare la notifica push nella lingua locale del dispositivo.

risposta

1

Quando i dispositivi si registrano sul server, lasciare che inviino le impostazioni internazionali. Quindi puoi avere gruppi di dispositivi locali e inviare i messaggi secondo le lingue.

+0

Sì, ma che succede se tra il momento in cui il token del dispositivo viene inviato al server e il momento in cui decidiamo di inviare all'utente una notifica, l'utente cambia lingua? Sul server abbiamo ancora la vecchia lingua, inviata insieme al token, un po 'di tempo fa, non la lingua corrente.In questo caso, l'applicazione potrebbe inviare al server la lingua corrente ogni volta che l'utente cambia le impostazioni internazionali. – bitek

+0

Vero, ma quanto spesso succederà? Con quale frequenza cambi la lingua del tuo telefono? – FWeigl

+0

Non importa quanto spesso, può semplicemente accadere. Altre risposte suggeriscono di ricevere "chiavi" all'interno della notifica e di farle corrispondere a risorse stringa localizzate, il che è un approccio molto migliore (pulito, semplice e a prova di proiettile). –

1

È possibile implementare tale lato server, dopo la registrazione GCM con l'invio di token, inviare anche le impostazioni locali del dispositivo. E poi notifica immediatamente agli utenti un messaggio localizzato.

Il payload è qualcosa di "tipo" non è una buona idea passarlo attraverso così tante informazioni.


D'altra parte, se hai fissato messaggi che si possono usare:

private void handleMessage(Intent intent) { 
    // server sent key-value pairs 
    String name_of_resource = intent.getExtra("message_id"); 

    int id = getResources().getIdentifier(name_of_resource, "string", getPackageName()); 
    if (id != 0) { 
     String text = getString(id); // the text to display 
     // generates a system notification to display here 
    } 
} 

vedere http://developer.android.com/google/gcm/gcm.html#received_data per la gestione dei dati ricevuti.

11

Si può prendere l'approccio suggerito da Ascorbin, o implementare qualcosa di simile a quello che Apple hanno nelle loro notifiche push:

Il server può inviare un messaggio GCM con un parametro che è una chiave a un messaggio. La tua app Android dovrà contenere per ogni chiave possibile le stringhe che dovrebbero essere visualizzate per essa in ciascuna delle 7 lingue (usando più copie di strings.xml). Quindi il ricevitore GCM nella tua app otterrà la chiave dal server e riceverà la stringa di risorse corrispondente (otterrà automaticamente la stringa corrispondente alla locale del dispositivo). In questo modo non devi preoccuparti della localizzazione sul tuo server. Lo svantaggio di questo approccio è che tutti i tuoi messaggi devono essere predefiniti nella tua app.

È inoltre possibile aggiungere parametri al tasto messaggio come Apple. Ad esempio, il server invia una chiave = "NEW_MAIL_FROM" e param1 = "John". L'app trova una risorsa stringa per quella chiave (si assume che il dispositivo utilizzi le impostazioni internazionali inglesi) - "Hai un messaggio da {0}" - e sostituisce il parametro con John, visualizzando il messaggio "Hai un messaggio da John". Un dispositivo con una locale diversa mostrerà un messaggio in una lingua diversa.

+0

Si potrebbe anche solo inviare il messaggio in 7 lingue diverse e decidere sul telefono da visualizzare. Creerebbe un sovraccarico, ma i messaggi push sono di natura piuttosto breve. – FWeigl

+0

@Ascorbin Il tuo suggerimento non funzionerà se per qualche motivo il messaggio nella lingua pertinente non raggiunge il dispositivo (cosa che potrebbe accadere se invii molti messaggi a un dispositivo inattivo in un breve periodo di tempo). – Eran

+0

Intendevo inviare tutte le lingue in un messaggio Gcm. Non so il limite di dimensioni per quelli però. – FWeigl

-3
  1. Invia un push GCM dal server (senza dati specifici della lingua).
  2. In risposta al push, il client effettua una chiamata API REST al server con la lingua come parametro Query.
  3. Il server recupera il testo della lingua appropriata e lo rimanda al client in tempo reale.
+0

perché dovrei voler effettuare due chiamate per push GCM. – j2emanue

Problemi correlati