2012-07-16 14 views
156

¿Cómo ha implementado Google su función de notificación push? ¿Funciona a través de sondeos realizados por un servicio que se ejecuta en segundo plano o de una manera diferente?¿Cómo funciona la tecnología de notificación push en Android?

+13

Me parece una pregunta real. Me preguntaba la respuesta y Google me trajo aquí. Una vez más, otra pregunta de calidad se cerró. –

+1

También quiero saber esto y estaba planeando escribir una pregunta, pero ya existe esta, así que definitivamente es una buena pregunta. – PSIXO

Respuesta

126

Por lo que he oído durante una conferencia de desarrolladores de Android en Israel:

No es simplemente un socket TCP espera en accept mode en un servidor de la nube de Google. La conexión de TCP había sido iniciada por la aplicación Google Play. Es por eso que Google Play debe estar instalado en el dispositivo para que funcione el Google Cloud Messaging (GCM) (anteriormente Servicio de mensajería de dispositivo a la nube de Android - C2DM).

Cuando este socket de cliente TCP recibe algún mensaje, el mensaje contiene información como el nombre del paquete de la aplicación a la que debe dirigirse y, por supuesto, los datos en sí. Estos datos se analizan y se empaquetan en un intent que se transmite y que finalmente recibe la aplicación.

La toma TCP permanece abierta incluso cuando el estado de la radio del dispositivo cambia al modo "inactivo". Las aplicaciones no tienen que estar ejecutándose para recibir los intentos.

Más información en http://developer.android.com/google/gcm/gcm.html

+1

Pero creo que funciona también con el emulador. Lo que me viene a la mente es que el dispositivo mantiene el servidor actualizado con su ruta actual (IP). Cuando el servidor de Google necesita enviar notificaciones, toma su ruta actual y reenvía el mensaje a esa ruta. ¿Tengo razón hasta cierto punto? –

+2

@Khawar Raza: cuando la IP del dispositivo cambió por alguna razón, el dispositivo se desconecta del servidor. cuando sucede - nueva conexión astemblish en cambio, basado en el dispositivo IP nuevo. –

+1

@Khawar Raza: el emulador funciona incluso sin google play. Supongo que inicia este socket integrado internamente, en lugar de google play –

0

Sí, tienes razón. Google tenía un servicio (GTalk Service) y este servicio le preguntó a los servidores de Google en algunos períodos de tiempo.

+0

¿El servicio de gtalkservice todavía existe y funciona? –

+0

No lo sé. Acabo de leer cómo funcionaba C2DM. Ahora algo puede cambiar. – Yury

7

Puede implementar la notificación PUSH en Android sí mismo con una conexión TCP sondeo largo. Pero eso implicaría mantener un socket adicional => drenaje de la batería. O puede abrir una conexión a intervalos regulares usando el Administrador de alarmas.

Google probablemente abre un socket para todas las notificaciones push C2DM, por lo tanto, es más eficiente en cuanto a la batería.

120

Android mantiene una conexión activa con los servidores de Google, pero no usa mucha energía o datos, porque no se envía tráfico a través de él hasta que algo envía un mensaje GCM a una aplicación en su teléfono. Solo hay una conexión en el teléfono, utilizada por todas las aplicaciones: la instalación de una nueva aplicación que utiliza GCM no agrega ninguna carga adicional.

El primer paso en GCM es que un servidor de terceros (como un servidor de correo electrónico) envía una solicitud al servidor GCM de Google. Este servidor luego envía el mensaje a su dispositivo, a través de esa conexión abierta. El sistema Android mira el mensaje para determinar para qué aplicación es e inicia esa aplicación. La aplicación debe haberse registrado en Android para usar GCM, y debe tener el permiso correspondiente. Cuando se inicia la aplicación, puede crear una notificación de inmediato con los datos del mensaje. Los mensajes de GCM tienen un tamaño muy limitado, por lo que la aplicación podría abrir una conexión normal al servidor de terceros para obtener más información (por ejemplo, descargar los encabezados de correos electrónicos nuevos).

La ventaja de usar notificaciones push es que las aplicaciones no tienen que ejecutarse a intervalos regulares para buscar nuevos datos, lo que ahorra energía y datos. La ventaja de tener un mecanismo centralizado como GCM es que el dispositivo solo necesita una conexión de red abierta y el sistema Android GCM es lo único que necesita para seguir funcionando, en lugar de que cada aplicación tenga que seguir ejecutándose en segundo plano para mantener su propia red conexión a su propio servidor.

Tomó esto de: Source También vea here.

+1

Solo un comentario sobre la conexión GCM. Esa única conexión es una conexión de sondeo. – wmac

+1

Lo más importante para mí fue que un servidor de terceros, p. un servidor de correo electrónico realmente envía un mensaje de notificación a los servidores de Google GCM. Es un servicio que Google proporciona de forma gratuita y cualquier tercero debe implementar un canal de comunicación con los servidores de Google utilizando su protocolo GCN. Por cierto, el protocolo es simplemente una respuesta HTTP con formato JSON. Consulte https://developers.google.com/cloud-messaging/ para obtener información detallada. –

Cuestiones relacionadas