Tengo curiosidad acerca de cómo Android es capaz de enviar notificaciones. He instalado aplicaciones como Gmail, Google+, Whatsapp, Twitter, etc., ¿cómo funciona Android saber cuando hay nuevos mensajes, whatsapp mensaje o Tweet? Es esto algo que es manejado por Android o la aplicación que se está ejecutando? ¿Qué tipo de cosas suceden por debajo de?
Respuestas
¿Demasiados anuncios?Es un sistema muy inteligente llamado "Notificaciones Push".
Cómo funciona
Un dispositivo Android mantendrá una conexión activa con los servidores de Google. Se trata de una conexión pequeña, que consume muy pocos datos y energía. Las notificaciones se envían desde los servidores de los desarrolladores de aplicaciones, por ejemplo Twitter, o Facebook, correos electrónicos, etc. a los servidores de Google. El dispositivo Android verá entonces esa notificación y la descargará.
Acabo de encontrar una explicación mejor en Stackoverflow. La buena explicación de cómo funciona se puede encontrar aquí . (He aquí una cita de la primera respuesta, aunque la segunda es más fácil de entender):
Simplemente hay un socket TCP esperando en modo de aceptación en un servidor de Google en la nube. La conexión TCP ha sido iniciada por la aplicación Goggle Play. Por eso Google Play debe estar instalado en el dispositivo para que funcione Google Cloud Messaging (GCM) (antes Android Cloud to Device Messaging Service - C2DM).
Cuando este socket cliente TCP recibe algún mensaje, el mensaje contiene información como el nombre del paquete de la aplicación a la que va dirigido y, por supuesto, los propios datos. Estos datos se analizan y se empaquetan en una intención que se emite y que finalmente recibe la aplicación.
El socket TCP permanece abierto incluso cuando el estado de radio del dispositivo pasa al modo "inactivo". No es necesario que las aplicaciones estén en ejecución para recibir las intents.
Por qué son útiles las notificaciones push
El efecto de tener una única conexión abierta significa dos cosas importantes:
En primer lugar, tu dispositivo utiliza menos datos/ancho de banda al conectarse a todos los servidores de terceros.
En segundo lugar, consume menos energía, ya que las aplicaciones no tienen que estar abiertas en segundo plano para comprobar si hay notificaciones, ya que todo lo gestiona una única aplicación en segundo plano.
Es imposible saber exactamente cómo está implementado sin tener acceso al código fuente (que no tenemos), pero viendo los permisos que requiere Android para instalar este tipo de aplicaciones es asumible que utilice algún tipo de Tecnología Push .
En este tipo de sistema de mensajería se establece el servidor como iniciador del evento, así que básicamente la app se registra en un servidor central y luego el servidor central, cuando lo necesita, envía un evento al cliente que es lo que ves cuando recibes un nuevo mensaje de Whatsapp, por ejemplo.
Puede obtener más información aquí .
Todas estas aplicaciones utilizan un servicio llamado Mensajería en la nube de Google (antes conocido como "Cloud 2 Device Messaging", de ahí que el permiso de la aplicación correspondiente siga llevando el distintivo C2D
abreviatura: com.google.Android.c2dm.permission.RECEIVE ).
En términos sencillos: Las aplicaciones que utilizan ese registro con los servidores de GCM cuando se inicia el dispositivo, y decirles lo que el registro es para. En el otro extremo, el servicio de destino (Gmail, Google+, etc.) también se ha registrado en esos servidores. Así que los servidores GCM median entre ambos: cada vez que hay un nuevo "evento", el dispositivo Android registrado para el servicio correspondiente recibe una notificación. Aquí hay una gran ventaja: en lugar de que cada aplicación mantenga su propia conexión de red para ello, sólo el Servicios de Google lo hará, y simplemente "despertará" a la aplicación de destino cuando haya noticias para ella.