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):
- WhatsApp se inicia y abre dos sockets: uno para escuchar y otro para enviar un mensaje al servidor.
- WhatsApps comienza a escuchar en el primer socket.
- 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.
- El servidor registra los números de teléfono y puerto en el mensaje y la dirección IP de donde proviene el mensaje.
- El servidor envía un reconocimiento a la aplicación.
- La aplicación recibe el acuse de recibo y cierra el socket del mensaje.
- Un mensaje con su número de teléfono como destino llega al servidor.
- 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).