O WhatsApp utiliza o GCM para trocar mensagens?
No início, pensei que isto era muito provavelmente uma instância de mensagens da nuvem do Android para o dispositivo, mas pode't ser: WhatsApp doesn't declara as permissões necessárias, e funciona no Eclair (Android 2.1), enquanto que as mensagens da nuvem para o dispositivo (e o seu substituto, Google Cloud Messaging) requerem pelo menos Froyo (Android 2.2).No entanto, o mais provável é que seja algum tipo de serviço de notificação "push". It's impossible to say exactly how it's implemented without access to WhatsApp's source code.
A parte sobre ser capaz de receber mensagens quando não está em uso é relativamente fácil de explicar, no entanto. A aplicação tem quase de certeza um serviço que corre em segundo plano para verificar periodicamente com o servidor (ou receber o server push, ou o que quer que faça). Quando você recebe uma mensagem, o serviço aparece uma notificação.
As para a questão de como o servidor poderia fazer um push, aqui's uma possibilidade (novamente, eu posso't verificar sem o código fonte):
- WhatsApp inicia e abre dois soquetes: Um para ouvir e outro para enviar uma mensagem para o servidor.
- WhatsApps começa a ouvir no primeiro socket.
- WhatsApp envia uma mensagem contendo o seu número de telefone e a porta do socket de audição para o servidor e espera por um reconhecimento.servidor grava o número de telefone e a porta na mensagem e o endereço IP de onde a mensagem veio.>li>li>li> O servidor envia um aviso de recebimento para o aplicativo.>li>li> O aplicativo recebe o aviso de recebimento e fecha o soquete de mensagens.servidor usa o endereço IP e o número de porta que tem associado ao seu número de telefone e usa essa informação para empurrar a mensagem para o seu telefone.>#li> uma mensagem com o seu número de telefone à medida que o destino chega ao servidor.
- ##br> Para que isso funcione, o aplicativo precisaria monitorar o estado da conexão de rede e reiniciar o socket de escuta / reenviar a mensagem de registro quando necessário (se o endereço IP mudar, por exemplo)