¿Cómo puede WhatsApp recibir mensajes cuando no está en uso?

23

Tengo curiosidad acerca de cómo WhatsApp puede recibir mensajes cuando no está en uso.

Quiero decir, entiendo que WhatsApp funciona utilizando la conexión a Internet en lugar de la red de teléfonos celulares. Imagina que no he tocado mi teléfono en horas. En ese momento, un amigo me envía un mensaje en WhatsApp. Lo entiendo de inmediato. ¿Eso significa que WhatsApp mantiene la conexión a Internet conectada en todo momento? ¿Eso significa que WhatsApp actúa como un servidor, abriendo puertos en el teléfono? ¿O tal vez una solicitud HTTP de larga duración?

Ram Rachum
fuente
También vea whatsapp.com/faq/en/s60/20910578
Pacerier el

Respuestas:

18

Al principio, pensé que probablemente era una instancia de mensajería de nube a dispositivo de Android , pero no puede serlo: WhatsApp no ​​declara los permisos necesarios y funciona en Eclair (Android 2.1), mientras que la mensajería de nube a dispositivo ( y su reemplazo, Google Cloud Messaging) requieren al menos Froyo (Android 2.2).

Sin embargo, lo más probable es que sea algún tipo de servicio de notificación push . Es imposible decir exactamente cómo se implementa sin acceso al código fuente de WhatsApp.

Sin embargo, la parte sobre la posibilidad de recibir mensajes cuando no está en uso es relativamente fácil de explicar. Es casi seguro que la aplicación tiene un servicio que se ejecuta en segundo plano para registrarse periódicamente con el servidor (o recibir el envío del servidor, o lo que sea que haga). Cuando recibe un mensaje, el servicio muestra una notificación.

En cuanto a la pregunta sobre cómo el servidor podría hacer un empuje, aquí hay una posibilidad (nuevamente, no puedo verificar sin el código fuente):

  1. WhatsApp se inicia y abre dos sockets: uno para escuchar y otro para enviar un mensaje al servidor.
  2. WhatsApps comienza a escuchar en el primer socket.
  3. WhatsApp envía un mensaje que contiene su número de teléfono y el puerto del conector de escucha al servidor y espera un acuse de recibo.
  4. El servidor registra los números de teléfono y puerto en el mensaje y la dirección IP de donde proviene el mensaje.
  5. El servidor envía un reconocimiento a la aplicación.
  6. La aplicación recibe el acuse de recibo y cierra el socket del mensaje.
  7. Un mensaje con su número de teléfono como destino llega al servidor.
  8. El servidor usa la dirección IP y el número de puerto que ha asociado con su número de teléfono y usa esa información para enviar el mensaje a su teléfono.

Para que esto funcione, la aplicación necesitaría monitorear el estado de la conexión de red y restablecer el socket de escucha / reenviar el mensaje de registro cuando sea necesario (si la dirección IP cambia, por ejemplo).

Trebor grosero
fuente
2
¿Whatsapp depende de la aplicación de Play Store? Citando desde el enlace de Wikipedia: Requiere dispositivos con Android 2.2 o superior que también tengan instalada la aplicación Market. Por lo tanto, puede que no sea exactamente eso, pero ciertamente se basa en los mismos principios. Sin embargo, es posible que desee incluir un extracto del segundo párrafo del artículo para que su respuesta sea más valiosa (y recibir más votos a favor;)
Izzy
Tienes toda la razón, @Izzy, debería haber agregado más detalles. Sin embargo, fue difícil hacerlo mientras estaba sentado en Subway escribiendo en mi SGS3. He actualizado la respuesta ahora. :-)
Trebor Rude
3
Nat no permitirá el paso 8, incluso si el móvil está en ip estática, lo cual nunca será el caso. las formas posibles son Xmpp o sondeo largo http
1
Tiene el permiso requerido. Está listado como "recibir datos de Internet" en Play Store. Ver android.stackexchange.com/a/61794
nyuszika7h
2
Desafortunadamente, las conexiones TCP entrantes son casi imposibles en dispositivos móviles. La gran mayoría de ellos no tienen direcciones IP públicas, e incluso si las tienen (por ejemplo, para operadores con capacidad IPv6), las conexiones entrantes generalmente se filtran. Actualmente, la mayoría de las aplicaciones utilizan los servicios push de Google o utilizan su propia conexión de cliente a servidor (especialmente Facebook). WhatsApp parece adoptar un enfoque híbrido, en mi experiencia: si GCM está disponible, el socket persistente se cierra después de estar inactivo durante unos minutos.
lxgr
8

Estoy seguro de que WhatsApp NO abre ningún puerto de escucha. la mayoría de los ISP bloquean las solicitudes entrantes, eso no funcionaría.

WhatsApp tiene un servicio. Básicamente eso significa que técnicamente nunca sales de WhatsApp. Entonces, la forma en que recibe mensajes mientras "no está ejecutando" WhatsApp es exactamente la misma forma en que los recibe cuando lo está ejecutando.

El cliente, en este caso WhatsApp, se conecta al servidor. El cliente mantiene esa conexión. Cuando el servidor tiene algo nuevo que decir, lo envía al cliente a través de esa conexión, y eso es todo.

Tu primera suposición es correcta.

WhatsApp no ​​tiene un mecanismo de cierre de sesión verdadero, mira esto .

WhatsApp no ​​tiene un mecanismo de cierre de sesión. La aplicación está diseñada para estar siempre conectada para que reciba sus mensajes rápidamente, incluso cuando no esté utilizando su teléfono de manera activa. Esto es similar a cómo funciona SMS y permite que los mensajes de WhatsApp se entreguen casi al instante.

Sin sentido152
fuente
2
Su enlace es para Nokia: no pude encontrar una pregunta similar para Android en su sitio. ¿Estás seguro de que lo mismo se aplica a Android? Esta pregunta de sus preguntas frecuentes de Android indica que utiliza una arquitectura PUSH (en la sección "¿Los mensajes aún tardan demasiado en llegar a su teléfono?"), En lugar de un servidor / cliente constantemente conectado.
Dylan Yaga
2
@DylanYaga es correcto. Vea, por ejemplo, el último párrafo de esta respuesta y la respuesta de Trebors aquí .
Izzy
Esto parece lo más lógico. Muchas veces estos servicios se llaman servicios push, pero no puedo imaginar que el cliente abra un puerto y, de hecho, actúe como un servidor local. Eso ciertamente causaría problemas de seguridad.
SPRBRN
1

Sus preguntas frecuentes sugieren que usan GCM. Verifique la respuesta a "¿Los mensajes aún tardan demasiado en llegar a su teléfono?"

negro
fuente
Tienes razón en que las preguntas frecuentes sugieren que, pero como señala Trebor Rude, la aplicación no tiene el permiso necesario, por lo que no pueden usar GCM.
Dan Hulme
2
Tiene el permiso requerido. Está listado como "recibir datos de Internet" en Play Store. Ver android.stackexchange.com/a/61794
nyuszika7h
2
Por lo que he visto, usan GCM si está disponible. Si no está disponible por algún motivo (por ejemplo, en un dispositivo sin servicios de Play o si la red lo filtra), el socket se mantiene indefinidamente.
lxgr
0

Whatsapp, como otras aplicaciones, se ejecuta como servicio. (Siempre está conectado) Los mensajes que se le envían se almacenan en el servidor de WhatsApp hasta 30 días, dentro de los cuales su WhatsApp debe estar activo para recibir y acusar recibo del mensaje. Las cuentas individuales se almacenan con el número de teléfono del usuario @ whatsapp.net

Dickson
fuente
1
30 días . Por favor, origen del vínculo de este hecho
beeshyams
0

Creo que debería ser así:

Cuando WhatsApp era nuevo, habría utilizado una solución basada en PNS, este PNS solo activaría el dispositivo y, una vez que se activa, puede crear una conexión de socket al servidor de WhatsApp.

Después, cuando WhatsApp es popular, ahora la mayoría de los dispositivos no se eliminarán como aplicación nativa y aplicación nativa. En mi Samsung S8 no puedo desinstalar WhatsApp, el modo de ahorro de energía no puede matarlo

Nasir
fuente