¿Cómo funciona la tecnología de notificación push en Android?

218

¿Cómo ha implementado Google su función de notificación push? ¿Funciona mediante encuestas realizadas por un servicio que se ejecuta en segundo plano o de una manera diferente?

Khawar Raza
fuente
24
Suena como una pregunta real para mí. Me preguntaba la respuesta y Google me trajo aquí. Una vez más otra pregunta de calidad cerrada.
Tino Mclaren
1
También quiero saber esto y estaba planeando escribir una pregunta, pero ya existe esta, así que definitivamente es una buena pregunta.
Igor Čordaš

Respuestas:

170

Por lo que escuché durante una conferencia de desarrolladores de Android en Israel:

Simplemente hay un socket TCP esperando en modo aceptar en un servidor de Google en la nube. La conexión 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 Google Cloud Messaging (GCM) (anteriormente Android Cloud to Device Messaging Service - C2DM ) funcione.

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 empaquetan en una intención que se transmite y finalmente es recibida por la aplicación.

El socket TCP permanece abierto incluso cuando el estado de la radio del dispositivo pasa 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

Tal Kanel
fuente
1
Pero creo que también funciona en 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?
Khawar Raza
2
@Khawar Raza: cuando la IP del dispositivo cambió por algún motivo, el dispositivo se desconecta del servidor. cuando sucede: en cambio, se establece una nueva conexión, basada en la nueva IP del dispositivo.
Tal Kanel
1
@Khawar Raza: el emulador funciona incluso sin Google Play. Supongo que iniciará este socket integrado internamente, en lugar de Google Play
Tal Kanel
2
Veo. Eso sería bastante interesante en realidad, me pregunto si eso es cierto.
you786
2
Así que todavía está sondeando, pero el lado bueno es que Google Play centraliza el sondeo.
Accollativo
143

Android mantiene una conexión activa a los servidores de Google, pero no usa mucha energía o datos, ya que no se envía tráfico hasta que algo envía un mensaje de Google Cloud Messaging (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 usa 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 con 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 los nuevos correos electrónicos).

La ventaja de usar notificaciones push es que las aplicaciones no tienen que ejecutarse a intervalos regulares para verificar si hay nuevos datos, ahorrando 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 debe seguir ejecutándose, 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: Fuente También vea aquí .

Aniket Thakur
fuente
1
Solo un comentario sobre la conexión GCM. Esa conexión única es una conexión de sondeo.
wmac
1
La parte crucial para mí fue que un servidor de terceros, por ejemplo, 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 tiene que implementar un canal de comunicación con los servidores de Google utilizando su protocolo GCN. Por cierto, el protocolo es prácticamente una respuesta HTTP con formato JSON. Visite developers.google.com/cloud-messaging para obtener información detallada.
Kyselejsyreček
10

Puede implementar la notificación push en Android usted mismo con una larga conexión tcp de sondeo. Pero eso implicaría mantener un zócalo adicional => drenaje de la batería. O puede abrir una conexión a intervalos regulares utilizando el Administrador de alarmas.

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

Shreesh
fuente
así que está confirmado que el cliente está sondeando a lo largo de una conexión tcp ¿verdad? ¿Sabes con qué frecuencia sondea los datos? es cada 5 segundos, por ejemplo. o es rápido como un latido del corazón?
j2emanue
3

A partir del 10 de abril de 2018, Google ha dejado de usar GCM. El servidor GCM y las API del cliente están en desuso y se eliminarán el 11 de abril de 2019. Migre las aplicaciones GCM a Firebase Cloud Messaging (FCM), que hereda la infraestructura GCM confiable y escalable, además de muchas características nuevas.

https://firebase.google.com/docs/cloud-messaging/

usuario1767754
fuente
1

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

Yury
fuente
Yo no sé. Acabo de leer cómo funcionaba C2DM. Ahora algo puede cambiar.
Yury
-3

En los dispositivos Android, cuando recibe notificaciones push, la imagen de la aplicación del remitente y un mensaje aparecen en la barra de estado. Exactamente cuando el cliente toca la notificación, él / ella aterriza en la aplicación.

Robert Manus
fuente
es una conexión TCP de larga ejecución en segundo plano, esto no se explica en la respuesta, por favor, atenerse a lo que la pregunta pide :)
Nishchal Gautam