¿Cómo funcionan las notificaciones push?

25

Me pregunto cómo funciona el sistema de notificaciones push.

¿Existe una conexión TCP / IP activa que se ejecute en segundo plano a los servidores de Google?

opc0de
fuente
1
Ver Wikipedia , que ciertamente es un poco difícil de leer. Básicamente, y en palabras sencillas: el cliente se conecta al servidor y solicita ser informado, y la respuesta llega "demorada" cuando hay información disponible (o nunca si no la hay), que luego es seguida por un nueva solicitud. Entonces, sí, esto requiere una conexión TCP / IP permanente de fondo mordisqueando su batería.
Izzy
@Izzy eso no puede ser correcto, porque (1) los documentos dicen que se crea un Intento cuando llega el mensaje, y (2) ¿qué se ejecuta en Android puede mantener una conexión abierta que Android nunca puede matar?
Michael
@Michael ¿Qué documentos? No soy un programador de Android que comprenda su profundidad (y esto no es un panel de discusión), por lo que probablemente no pueda discutir aquí. He escuchado que los oyentes (para transmisiones) pueden establecerse dinámicamente, pero nunca he escuchado eso sobre las intenciones (en mi humilde opinión, deben declararse en el Manifest). Me imagino que algún servicio de Google hace el "trabajo real", y la aplicación simplemente registra un "receptor". La descripción anterior era más "general", no específica de Android, y traté de hacerlo simple;)
Izzy

Respuestas:

25

Sí, 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 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 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 permanecer ejecutándose en segundo plano para mantener su propia red. conexión a su propio servidor.

Dan Hulme
fuente
Solo agregaría 1 comentario: los mensajes GCM pueden tener un tamaño de 4KByte, por lo que no son tan limitados. developer.android.com/google/gcm/gcm.html
Moszi
¿Qué es lo que mantiene abierta esta conexión? Cualquier actividad o servicio de Android se puede eliminar en cualquier momento.
Michael
1
Gracias por la info. Según mi pregunta , ¿sabes cuál es la URL de un socket abierto? (URL de la conexión del dispositivo a los servidores GCM que se abre y se usa para datos de notificación)
Sabeti
6

El sistema operativo Android ahora utiliza GCM (Google Cloud Messaging) para Push Notification WS. Puedes tener una mejor idea aquí ; le proporcionará una descripción arquitectónica sobre el servicio completo de notificaciones push con su ciclo de vida.

Espero que ayude.

Bhavesh
fuente
¿Hay alguna manera de hacer algo similar sin tener que depender de los servidores de Google?
Michael
@Michael ¿Usa los servicios de Amazon Cloud? Parecen tener un concepto comparable. Pero para el "cómo", este es el lugar equivocado;)
Izzy
1

Respuesta tardía a la vieja pregunta, pero vale la pena ponerla.

GCM quedó en desuso el pasado abril de 2018 y Google ha recomendado utilizar FCM en su lugar, que es similar a GCM.

  1. no necesitamos escribir nuestra propia lógica de reintento de registro o suscripción
  2. Puede usar Firebase Notificaciones, una solución de notificaciones sin servidor con una consola web que permite a cualquier persona enviar notificaciones para dirigirse a audiencias específicas basadas en los conocimientos de Firebase Analytics.
  3. Tiene la infraestructura central de GCM.
  4. Un mensaje único puede transferir una carga útil de hasta 4KB a una aplicación cliente.
Ajay Deepak
fuente
1
Desde la perspectiva de la aplicación, FCM no es similar a GCM, es idéntico. FCM es solo el nuevo nombre de GCM.
Robert