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):
- WhatsApp se inicia y abre dos sockets: uno para escuchar y otro para enviar un mensaje al servidor.
- WhatsApp comienza a escuchar en el primer socket.
- 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.
- 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.
- El servidor envía un acuse de recibo a la aplicación.
- La aplicación recibe el acuse de recibo y cierra el socket del mensaje.
- Un mensaje con tu número de teléfono como destinatario llega al servidor.
- 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).
0 votos
También ver whatsapp.com/faq/en/s60/20910578
0 votos
También vea highscalability.com/blog/2014/2/26/…