Me pregunto cómo funciona el sistema de notificaciones push.
¿Hay una conexión TCP/IP activa que se ejecuta en segundo plano a los servidores de Google?
Me pregunto cómo funciona el sistema de notificaciones push.
¿Hay una conexión TCP/IP activa que se ejecuta en segundo plano a los servidores de Google?
Sí, Android mantiene una conexión activa con los servidores de Google, pero no utiliza mucha energía ni datos, porque no se envía tráfico a través de ella hasta que algo envía un mensaje GCM a una aplicación del teléfono. Sólo hay una conexión en el teléfono, utilizada por todas las aplicaciones: instalar una nueva aplicación que utilice GCM no añade 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 envía entonces el mensaje a tu dispositivo, a través de esa conexión abierta. El sistema Android examina el mensaje para determinar a qué aplicación se refiere e inicia esa aplicación. La aplicación debe haberse registrado en Android para utilizar GCM y debe tener el permiso correspondiente. Cuando la aplicación se inicia, puede crear una notificación inmediatamente 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 con el servidor de terceros para obtener más información (por ejemplo, descargando las cabeceras de los nuevos correos electrónicos).
La ventaja de utilizar las notificaciones push es que las aplicaciones no tienen que ejecutarse a intervalos regulares para comprobar si hay nuevos datos, lo que ahorra tanto energía como datos. La ventaja de contar con un mecanismo centralizado como GCM es que el dispositivo solo necesita una conexión de red abierta y el sistema GCM de Android es lo único que tiene que seguir funcionando, en lugar de que cada aplicación tenga que permanecer ejecutándose en segundo plano para mantener su propia conexión de red con su propio servidor.
Sólo añadiría un comentario: Los mensajes GCM pueden tener un tamaño de 4KByte, por lo que no están tan limitados. developer.Android.com/google/gcm/gcm.html
¿Qué es lo que mantiene abierta esta conexión? Cualquier actividad o servicio de Android puede ser eliminado en cualquier momento.
Gracias por la información. Según mi pregunta (URL de la conexión desde el dispositivo a los servidores de GCM que se abre y utiliza para los datos de notificación)
El sistema operativo Android utiliza ahora GCM (Google Cloud Messaging) para las notificaciones push. Usted puede tener una mejor idea aquí le dará una visión general de la arquitectura del servicio de notificaciones push completo con su ciclo de vida.
Espero que sea de ayuda.
Respuesta tardía a una pregunta antigua, pero vale la pena ponerla.
GCM fue obsoleto el pasado mes de abril de 2018 y google ha recomendado utilizar FCM en su lugar, que es similar a GCM.
PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.
1 votos
Ver Wikipedia -- que hay que reconocer que es un poco difícil de leer. Básicamente, y puesto en palabras fáciles: El cliente se conecta al servidor y pide que se le informe -- y la respuesta llega "en diferido" cuando hay información disponible (o nunca si no la hay), a lo que sigue una nueva petición. Así que sí, esto requiere una conexión TCP/IP en segundo plano permanente mordisqueando su batería.
0 votos
@Izzy eso no puede ser correcto, porque (1) los docs dicen que se crea un Intent cuando llega el mensaje, y (2) ¿qué ejecutando en Android puede mantener una conexión abierta que Android nunca puede matar?
0 votos
@Michael ¿Qué documentos? No soy programador de Android para entender la profundidad de la misma (y esto no es un foro de discusión), así que probablemente no pueda discutir contigo aquí. He oído que oyentes (para las emisiones) puede establecerse dinámicamente - pero nunca he oído eso de intents (En mi opinión, tienen que ser declarado en el
Manifest
). Podría imaginar que algún servicio de Google hiciera el "trabajo real", y que la aplicación se limitara a registrar un "receptor". La descripción anterior era más "general", no específica de Android, y traté de mantenerla simple ;)