Come funzionano le notifiche push?


25

Mi chiedo come funziona il sistema di notifiche push?

Esiste una connessione TCP / IP attiva che viene eseguita in background ai server di Google?


1
Vedi Wikipedia - che certamente è un po 'difficile da leggere. Fondamentalmente, e in parole semplici: il client si connette al server e chiede di essere informato - e la risposta viene quindi "ritardata" quando le informazioni sono disponibili (o mai se non ce ne sono), che poi è seguito da un nuova richiesta. Quindi sì, questo richiede una connessione TCP / IP permanente in background che mordicchi la batteria.
Izzy

@Izzy che non può essere giusto, perché (1) i documenti dicono che viene creato un Intento quando arriva il messaggio e (2) che cosa funziona su Android può mantenere aperta una connessione che Android non può mai uccidere?
Michael,

@Michael Quali documenti? Non sono un programmatore Android per capirne la profondità (e questo non è un forum di discussione), quindi probabilmente non posso discutere con te qui. Ho sentito che gli ascoltatori (per le trasmissioni) possono essere stabiliti dinamicamente, ma non ho mai sentito parlare di intenti (IMHO devono essere dichiarati nel Manifest). Potrei immaginare un servizio di Google che fa il "vero lavoro" e l'app che registra semplicemente un "ricevitore". La descrizione sopra era più "generale", non specifica per Android, e ho cercato di renderlo semplice;)
Izzy

Risposte:


25

Sì, Android mantiene una connessione attiva ai server di Google, ma non utilizza molta potenza o dati, perché non viene inviato traffico lungo fino a quando qualcosa non invia un messaggio GCM a un'app sul tuo telefono. C'è solo una connessione al telefono, 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 invia quindi il messaggio al tuo dispositivo, attraverso quella connessione aperta. Il sistema Android esamina il messaggio per determinare a quale app è destinata e avvia tale app. L'app deve essere registrata con Android per utilizzare GCM e deve disporre dell'autorizzazione pertinente. All'avvio dell'app, potrebbe creare subito una notifica con i dati del messaggio. Le dimensioni dei messaggi GCM sono molto limitate, quindi l'app potrebbe invece aprire una normale connessione al server di terze parti per ottenere ulteriori informazioni (ad esempio, scaricando le intestazioni delle nuove e-mail).

Il vantaggio dell'utilizzo delle notifiche push è che le app non devono essere eseguite 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 necessita 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.


Vorrei aggiungere solo 1 commento: i messaggi GCM possono avere dimensioni 4KByte, quindi non sono così limitati. developer.android.com/google/gcm/gcm.html
Moszi,

Cosa tiene aperta questa connessione? Qualsiasi attività o servizio Android può essere ucciso in qualsiasi momento.
Michael,

1
Grazie per le informazioni. Secondo la mia domanda , sai qual è l'URL di un socket aperto? (URL della connessione dal dispositivo ai server GCM che viene aperto e utilizzato per i dati di notifica)
Sabeti,

6

Il sistema operativo Android ora utilizza GCM (Google Cloud Messaging) per Push Notification WS. Puoi avere un'idea migliore qui ; ti fornirà una panoramica architettonica sul servizio di notifica push completo con il suo ciclo di vita.

Spero che possa aiutare.


Esiste un modo per fare una cosa simile senza fare affidamento sui server di Google?
Michael,

@Michael Usando i servizi di Amazon Cloud? Sembrano avere un concetto comparabile. Ma per il "come fare", questo è il posto sbagliato;)
Izzy

1

Risposta tardiva alla vecchia domanda, ma vale la pena metterla.

GCM è stato deprecato lo scorso aprile 2018 e google ha raccomandato di utilizzare FCM invece che è simile a GCM.

  1. non è necessario scrivere la nostra logica di registrazione o di tentativo di abbonamento
  2. Puoi utilizzare le notifiche di Firebase, una soluzione di notifica senza server con una console Web che consente a chiunque di inviare notifiche per indirizzare un pubblico specifico in base alle informazioni di Firebase Analytics.
  3. Ha l'infrastruttura principale di GCM.
  4. Un singolo messaggio può trasferire un payload fino a 4KB a un'app client.

1
Dal punto di vista dell'app FCM non è simile a GCM, è identico. FCM è solo il nuovo nome di GCM.
Robert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.