2014-04-10 15 views
5

Ho un app Android, che mi collego al mio server utilizzando API REST (Django quadro riposo)Come funziona GCM? (Messaggistica cloud Google per Android)

Ecco uno scenario (e forse il mio piano):

  • i dati vengono inviati avanti e indietro come json
  • Ho un modello utente e un modello di attività in cui gli utenti sono proprietari di alcune attività.
  • Gli utenti tipicamente inviano un compito a un altro utente (con JSON simile a questo: {"proprietario": "exampleuser", "from": "otheruser", "content": "example" ...} utilizzando il metodo POST) -Le attività ha un campo booleano "completato" e viene eliminato una volta completata l'attività (utilizzando il metodo PUT o PATCH: completato = true,)
  • una volta che una nuova attività viene creata utilizzando il metodo POST, l'unico modo in cui gli utenti possono vedere tutte le attività concernenti i loro compiti è attraverso un'attività Android che utilizza il metodo GET per ottenere un elenco di tutti i compiti di proprietà dell'utente, cercando tutti gli oggetti di proprietà dell'utente

Quindi le mie domande sono:

  1. Invece di fare in modo che l'utente verifichi l'app ogni volta. Come posso utilizzare GCM per inviare notifiche all'utente?
  2. Come viene indicato a quale utente o dispositivo inviare la notifica push?
  3. Come fa GCM a sapere quando è stata apportata una modifica alle attività o quando un utente POST un'attività?

risposta

7

Come per la GCM implementazione, si richiede che si implementare un server remoto che gestirà tutte le richieste, sia in entrata che in uscita. È possibile farlo semplicemente con un server Web che funge da webservice, che otterrà (ad esempio) le richieste dei client con una richiesta HTTP POST e di conseguenza l'atto di processo.

Invece di fare in modo che l'utente verifichi l'app ogni volta. Come posso utilizzare GCM per inviare notifiche all'utente?

Questo sarà gestito dal server che ho appena descritto. Saprà chi è iscritto e chi dovrebbe ricevere le notifiche.

Come viene indicato a quale utente o dispositivo inviare la notifica push?

Lo stesso vale qui. Il server, su una sottoscrizione, dovrebbe archiviare gli utenti in una sorta di archivio (un database SQL, per esempio), e in questo modo saprà chi inviare le notifiche. Ciò implica che dovrai implementare un meccanismo di timeout. Nel mio caso, faccio in modo che i client inviino un POST HTTP dummy ogni 30 secondi. Se non ottengo questa richiesta da un ragionevole lasso di tempo, ritengo che il client sia scaduto e pertanto li rimuovo dal database.

Come fa GCM a sapere quando è stata apportata una modifica alle attività o quando un utente POST un'attività?

Stessa storia, è tutto gestito dal server. È implementare la logica di ciò che dovrebbe accadere su ogni richiesta.

Si potrebbe desiderare di leggere questo: How to send location of the device on server when needed

E anche questa riferimenti:

+3

In che modo GCM trasforma un messaggio dal server in un intent, quando l'applicazione potrebbe non essere in esecuzione? Che cosa è in esecuzione su Android che non può essere ucciso (ad esempio, sarà sempre in esecuzione ogni volta che un messaggio potrebbe entrare) che esegue questo passaggio fondamentale, quindi la mia app viene avviata da un intent? – Michael

27

Android mantiene una connessione attiva ai server di Google, ma non usa molto potere o dati, perché senza traffico viene inviato lungo esso fino a quando qualcosa manda un messaggio GCM a un'app sul telefono. Sul telefono esiste una sola connessione, utilizzata da tutte le app: l'installazione di una nuova app che utilizza GCM non aggiunge alcun carico aggiuntivo.

Il primo passo in GCM è che un server di terze parti (come un server di posta elettronica) invia una richiesta al server GCM di Google. Questo server quindi invia il messaggio al dispositivo, attraverso quella connessione aperta. Il sistema Android controlla il messaggio per determinare a quale app è destinato e avvia tale app. L'app deve essere registrata con Android per utilizzare GCM e deve disporre dell'autorizzazione pertinente. Quando l'app viene avviata, potrebbe creare immediatamente una notifica con i dati del messaggio. I messaggi GCM hanno dimensioni molto limitate, quindi l'app potrebbe invece aprire una normale connessione al server di terze parti per ottenere ulteriori informazioni (ad esempio, il download delle intestazioni di nuove e-mail).

Il vantaggio di utilizzare le notifiche push è che le app non devono essere eseguite a intervalli regolari per verificare la presenza di nuovi dati, risparmiando sia alimentazione che dati. Il vantaggio di avere un meccanismo centralizzato come GCM è che il dispositivo ha bisogno solo di una connessione di rete aperta e il sistema GCM Android è l'unica cosa che deve continuare a funzionare, piuttosto che ogni app deve rimanere in esecuzione in background per mantenere la propria rete connessione al proprio server.

+0

Grazie per le informazioni. Secondo [la mia domanda] (http://stackoverflow.com/questions/33117827/parse-api-push-notifications-parse-com-gcm-urls-ips-protocols-and-or-ports), sai cosa è l'URL di un socket aperto? (URL della connessione dal dispositivo ai server GCM che viene aperto e utilizzato per i dati di notifica) –

Problemi correlati