29 votos

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

Estoy curioso de cómo WhatsApp es capaz de 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 telefonía celular. Imagina que no he tocado mi teléfono en horas. En ese momento, un amigo me envía un mensaje por WhatsApp. Lo recibo inmediatamente. ¿Eso significa que WhatsApp mantiene la conexión a Internet conectada todo el tiempo? ¿Significa que WhatsApp actúa como un servidor, abriendo puertos en el teléfono? ¿O tal vez es una solicitud HTTP de larga duración?

0 votos

0 votos

22voto

Trebor Rude Puntos 750

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

Sin embargo, es muy probable que sea algún tipo de servicio de notificaciones push. Es imposible decir exactamente cómo está implementado sin tener acceso al código fuente de WhatsApp.

La parte de poder recibir mensajes cuando no está en uso es relativamente fácil de explicar. La aplicación casi seguramente tiene un servicio que se ejecuta en segundo plano para comunicarse con el servidor periódicamente (o recibir el empuje del servidor, o lo que sea que haga). Cuando recibes un mensaje, el servicio muestra una notificación.

En cuanto a la pregunta de cómo el servidor podría hacer un empuje, aquí hay una posibilidad (de nuevo, 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. WhatsApp comienza a escuchar en el primer socket.
  3. WhatsApp envía un mensaje conteniendo tu número de teléfono y el puerto del socket 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 desde la que llegó el mensaje.
  5. El servidor envía un acuse de recibo a la aplicación.
  6. La aplicación recibe el acuse de recibo y cierra el socket del mensaje.
  7. Un mensaje con tu número de teléfono como destinatario llega al servidor.
  8. El servidor utiliza la dirección IP y el número de puerto asociado con tu número de teléfono y utiliza esa información para enviar el mensaje a tu 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).

2 votos

¿Depende Whatsapp de la aplicación de Google Play? Citando el enlace de Wikipedia: Requiere dispositivos que funcionen con Android 2.2 o superior y que también tengan instalada la aplicación de Market. Por lo tanto, es posible que no sea exactamente así, pero ciertamente se basa en los mismos principios. Es posible que desees incluir algún fragmento del segundo párrafo del artículo para que tu respuesta sea más valiosa (¡y recibir más votos arriba! ;)

0 votos

Tienes toda la razón, @Izzy, debería haber añadido más detalles. Fue difícil hacerlo mientras estaba sentado en Subway escribiendo en mi SGS3, sin embargo. ¡He actualizado la respuesta ahora! :-)

0 votos

Estabas apuntando en la dirección correcta :) Después de tu edición, se ve perfecto para mí, así que +1 :)

8voto

Mindless152 Puntos 29

Estoy completamente seguro de que WhatsApp NO abre ningún puerto de escucha. La mayoría de los proveedores de servicios de internet 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 recibes mensajes cuando "no estás ejecutando" WhatsApp es exactamente la misma manera en que los recibes cuando lo estás 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 conjetura es correcta.

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

WhatsApp no tiene un mecanismo de cierre de sesión. La aplicación está diseñada para permanecer siempre conectada para que recibas tus mensajes rápidamente, incluso cuando no estás usando activamente tu teléfono. Esto es similar a cómo funcionan los mensajes de texto y permite que los mensajes de WhatsApp se entreguen casi instantáneamente.

2 votos

Tu 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 su FAQ de Android indica que utiliza una arquitectura de PUSH (en la sección "¿Los mensajes siguen tardando demasiado en llegar a tu teléfono?") - en lugar de un servidor/cliente conectado constantemente.

2 votos

@DylanYaga tiene razón. Vea, por ejemplo, el último párrafo de esta respuesta y la respuesta de Trebor aquí.

0 votos

Esto parece lo más lógico. Muchas veces a estos servicios se les llama servicios push, pero no puedo imaginar que el cliente abriría un puerto y de hecho actuaría como un servidor local. Eso ciertamente causaría problemas de seguridad.

2voto

Sebouh Puntos 101

Su FAQ sugiere que utilizan GCM. Verifica la respuesta a "¿Los mensajes siguen tardando demasiado en llegar a tu teléfono?"

0 votos

Tienes razón en que la sección de preguntas frecuentes sugiere eso, pero como señala Trebor Rude, la aplicación no tiene el permiso necesario, por lo que no pueden estar utilizando GCM en sí mismo.

2 votos

Tiene el permiso requerido. Está listado como "recibir datos de Internet" en la Play Store. Ver android.stackexchange.com/a/61794

2 votos

Desde lo que he visto, utilizan GCM si está disponible. Si no está disponible por alguna razón (por ejemplo, en un dispositivo sin los servicios de Play o si está filtrado por la red), el socket se mantiene indefinidamente.

0voto

Simon Puntos 123

Whatsapp al igual que otras aplicaciones se ejecuta como un servicio. (Siempre estás conectado) Los mensajes que te envían se almacenan en el servidor de whatsapp durante 30 días, tiempo durante el cual tu whatsapp debe estar activo para recibir y confirmar la recepción del mensaje. Las cuentas individuales se almacenan con el número de teléfono del usuario en @whatsapp.net

1 votos

30 días. Por favor, proporciona el enlace de la fuente de ese dato.

0voto

Nasir Puntos 101

Creo que debería ser así:

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

Después, ahora que WhatsApp es popular, en la mayoría de los dispositivos viene como una aplicación nativa y la aplicación nativa no será cerrada. En mi Samsung S8 no puedo desinstalar WhatsApp, el modo de ahorro de energía no lo puede cerrar.

PreguntAndroid.com

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.

Powered by:

X