2012-07-16 17 views
156

In che modo Google ha implementato la funzione di notifica push? Funziona tramite il polling eseguito da un servizio in esecuzione in background o in un modo diverso?Come funziona la tecnologia di notifica push su Android?

+13

Suona come una vera domanda per me. Mi stavo chiedendo la risposta e Google mi ha portato qui. Ancora una volta un'altra domanda di qualità chiusa. –

+1

Voglio anche saperlo e stavo pianificando di scrivere una domanda, ma questa è già presente quindi è sicuramente una buona domanda. – PSIXO

risposta

126

Da quello che ho sentito nel corso di una conferenza di sviluppatori Android in Israele:

C'è semplicemente un socket TCP in attesa in accept mode su un server di Google Cloud. La connessione TCP era stata avviata dall'applicazione Google Play. Ecco perché Google Play deve essere installato sul dispositivo per rendere operativo il servizio Google Cloud Messaging (GCM) (in precedenza Android Cloud to Device Messaging Service - C2DM).

Quando questo client socket TCP riceve qualche messaggio, il messaggio contiene informazioni quali il nome del pacchetto dell'applicazione dovrebbe essere indirizzata a, e, naturalmente, - i dati stessi. Questi dati vengono analizzati e raggruppati in un intent che viene trasmesso e eventualmente ricevuto dall'applicazione.

La presa TCP rimane aperto anche quando il dispositivo allo stato della radio entra in modalità "idle". Le applicazioni non devono essere in esecuzione per ricevere gli intenti.

Maggiori informazioni su http://developer.android.com/google/gcm/gcm.html

+1

Ma penso che funzioni anche sull'emulatore. La cosa che mi viene in mente è che il dispositivo tiene aggiornato il server con il suo percorso attuale (IP). Quando il server di google deve inviare una notifica, prende il suo percorso corrente e inoltra il messaggio a quel percorso. Ho ragione in una certa misura? –

+2

@Khawar Raza: quando l'IP del dispositivo è cambiato per qualche motivo, il dispositivo si disconnette dal server. quando succede - nuova connessione astemblish invece, in base al nuovo IP del dispositivo. –

+1

@Khawar Raza: l'emulatore funziona anche senza la riproduzione di Google. Immagino che avvenga questo socket integrato internamente, invece di google play –

0

Sì, hai ragione. Google aveva un servizio (servizio GTalk) e questo servizio chiedeva ai server di Google in alcuni periodi.

+0

Il servizio gtalkservice esiste ancora e funziona? –

+0

Non lo so. Ho appena letto come funzionava C2DM. Ora qualcosa può cambiare. – Yury

7

è possibile implementare la notifica push su Android te stesso con una connessione TCP polling lungo. Ma questo implicherebbe il mantenimento di una presa extra => scarica della batteria. Oppure è possibile aprire una connessione a intervalli regolari utilizzando Alarm Manager.

Google probabilmente apre una presa per tutte le notifiche C2DM spinta, da qui il suo più efficiente della batteria.

120

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 invia un messaggio GCM a un app sul tuo 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 per GCM è che un server di terze parti (ad esempio 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 applicazioni non devono funzionare a intervalli regolari per verificare la presenza di nuovi dati, risparmiando energia e 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.

Preso da: Source Vedere anche here.

+1

Solo un commento sulla connessione GCM. Quella singola connessione è una connessione Polling. – wmac

+1

La parte cruciale per me era che un server di terze parti, ad es. un server di posta elettronica invia davvero un messaggio di notifica ai server GCM di Google. Si tratta di un servizio che Google fornisce gratuitamente e qualsiasi di tali terze parti deve implementare un canale di comunicazione con i server di Google utilizzando il proprio protocollo GCN. A proposito, il protocollo è praticamente una risposta HTTP in formato JSON. Vedi https://developers.google.com/cloud-messaging/ per informazioni dettagliate. –