Como o WhatsApp consegue receber mensagens quando não está em uso?

23

Estou curioso para saber como o WhatsApp consegue receber mensagens quando não está em uso.

Quero dizer, eu entendo que o WhatsApp funciona usando a conexão com a Internet e não a rede de telefones celulares. Imagine que não toquei meu telefone há horas. Nesse momento, um amigo me envia uma mensagem no WhatsApp. Eu entendo imediatamente. Isso significa que o WhatsApp mantém a conexão com a Internet sempre ligada? Isso significa que o WhatsApp atua como um servidor, abrindo portas no telefone? Ou talvez uma solicitação HTTP de longa duração?

Ram Rachum
fonte
Veja também whatsapp.com/faq/en/s60/20910578
Pacerier

Respostas:

18

No começo, pensei que provavelmente era uma instância da nuvem do Android para o sistema de mensagens do dispositivo , mas não pode ser: o WhatsApp não declara as permissões necessárias e funciona no Eclair (Android 2.1), enquanto o sistema de mensagens da nuvem para o dispositivo ( e sua substituição, o Google Cloud Messaging) requer pelo menos o Froyo (Android 2.2).

No entanto, é mais provável que seja algum tipo de serviço de notificação por push . É impossível dizer exatamente como é implementado sem acesso ao código-fonte do WhatsApp.

A parte de poder receber mensagens quando não está em uso é relativamente fácil de explicar. O aplicativo quase certamente possui um serviço que é executado em segundo plano para fazer check-in periodicamente com o servidor (ou receber o push do servidor ou o que ele fizer). Quando você recebe uma mensagem, o serviço exibe uma notificação.

Quanto à questão de como o servidor poderia fazer um push, eis uma possibilidade (novamente, não posso verificar sem o código-fonte):

  1. O WhatsApp inicia e abre dois soquetes: um para escutar e outro para enviar uma mensagem ao servidor.
  2. O WhatsApps começa a ouvir no primeiro soquete.
  3. O WhatsApp envia uma mensagem contendo o seu número de telefone e a porta do soquete de escuta para o servidor e aguarda uma confirmação.
  4. O servidor registra os números de telefone e porta na mensagem e o endereço IP de onde a mensagem veio.
  5. O servidor envia uma confirmação para o aplicativo.
  6. O aplicativo recebe o reconhecimento e fecha o soquete da mensagem.
  7. Uma mensagem com o seu número de telefone conforme o destino entra no servidor.
  8. O servidor usa o endereço IP e o número da porta que ele associou ao seu número de telefone e usa essas informações para enviar a mensagem para o seu telefone.

Para que isso funcione, o aplicativo precisará monitorar o estado da conexão de rede e redefinir o soquete de escuta / reenviar a mensagem de registro quando necessário (se o endereço IP mudar, por exemplo).

Trebor Rude
fonte
2
O Whatsapp depende do aplicativo playstore? Citação no link Wikipedia: Requer dispositivos com Android 2.2 ou superior que também tenham o aplicativo Market instalado. Portanto, pode não ser exatamente isso, mas certamente é baseado nos mesmos princípios. Você pode querer incluir algum trecho do parágrafo 2º do artigo, no entanto, para tornar a sua resposta mais valiosa (e receber mais upvotes;)
Izzy
Você está certo, @Izzy, eu deveria ter adicionado mais detalhes. Foi difícil de fazer enquanto eu estava sentado no Subway escrevendo no meu SGS3. Atualizei a resposta agora. :-)
Trebor Rude
3
Nat não permitirá a etapa 8, mesmo se o celular estiver com IP estático, o que nunca será o caso. as formas possíveis são ou XMPP ou longa votação http
1
Ele tem a permissão necessária. Ele está listado como "receber dados da Internet" na Play Store. Veja android.stackexchange.com/a/61794
nyuszika7h
2
Infelizmente, as conexões TCP de entrada são quase impossíveis em dispositivos móveis. A grande maioria deles não possui endereços IP públicos e, mesmo que possuam (por exemplo, para operadores compatíveis com IPv6), as conexões de entrada geralmente são filtradas. Atualmente, a maioria dos aplicativos usa os serviços push do Google ou lança seu próprio cliente persistente para conexão de soquete do servidor (principalmente o Facebook). O WhatsApp parece ter uma abordagem híbrida, na minha experiência: se o GCM estiver disponível, o soquete persistente será fechado após ficar inativo por alguns minutos.
Lxgr 23/01/16
8

Tenho certeza de que o WhatsApp NÃO abre nenhuma porta de escuta. a maioria dos ISPs bloqueia solicitações recebidas, que não funcionariam.

O WhatsApp tem um serviço. Basicamente, isso significa que tecnicamente você nunca sai do WhatsApp. Portanto, a maneira como você recebe mensagens enquanto "não está executando" o WhatsApp é exatamente da mesma maneira que recebe quando está executando.

O cliente, neste caso o WhatsApp, se conecta ao servidor. O cliente mantém essa conexão. Quando o servidor tem algo novo a dizer, ele o envia ao cliente através dessa conexão, e é tudo.

Seu primeiro palpite está correto.

O WhatsApp não possui um mecanismo de logoff verdadeiro, veja isso .

O WhatsApp não possui um mecanismo de logout. O aplicativo foi projetado para estar sempre conectado para que você receba suas mensagens rapidamente, mesmo quando não estiver usando o telefone ativamente. É semelhante à forma como o SMS funciona e permite que as mensagens do WhatsApp sejam entregues quase instantaneamente.

Mindless152
fonte
2
Seu link é para a Nokia - não foi possível encontrar uma pergunta semelhante para o Android no site deles. Tem certeza de que o mesmo se aplica ao Android? Esta pergunta das perguntas frequentes do Android indica que ele utiliza uma arquitetura PUSH (na seção "As mensagens ainda demoram muito para chegar ao seu telefone?") - em vez de um servidor / cliente constantemente conectado.
Dylan Yaga
2
@DylanYaga está correto. Veja, por exemplo, o último parágrafo desta resposta e a Trebors responde aqui .
Izzy
Isso parece o mais lógico. Muitas vezes, esses serviços são chamados de serviços push, mas não consigo imaginar que o cliente abra uma porta e realmente atue como um servidor local. Isso certamente causaria problemas de segurança.
SPRBRN 17/02/2014
1

As perguntas frequentes sugerem que eles usam o GCM. Verifique a resposta para "As mensagens ainda estão demorando muito para chegar ao seu telefone?"

Preto
fonte
Você está certo que o FAQ sugere que, mas como Trebor Rude aponta, o aplicativo não tem a permissão necessária, portanto, eles não podem usar o próprio GCM.
Dan Hulme
2
Ele tem a permissão necessária. Ele está listado como "receber dados da Internet" na Play Store. Veja android.stackexchange.com/a/61794
nyuszika7h
2
Pelo que vi, eles usam o GCM, se disponível. Se não estiver disponível por algum motivo (por exemplo, em um dispositivo sem serviços Play ou se filtrado pela rede), o soquete será mantido indefinidamente.
Lxgr
0

O WhatsApp como outros aplicativos é executado como serviço. (Você está sempre conectado) As mensagens enviadas a você são armazenadas no servidor whatsapp até 30 dias, período em que seu whatsapp deve estar ativo para receber e confirmar o recebimento da mensagem. Contas individuais são armazenadas com o número de telefone do usuário @ whatsapp.net

Dickson
fonte
1
30 dias . Por favor fonte de ligação para esse fato
beeshyams
0

Eu acho que deveria ser assim:

Quando o whatsapp era novo, ele usava a solução baseada em PNS, esse PNS apenas ativava o dispositivo e, quando acordava, podia criar uma conexão de soquete ao servidor whatsapp.

Depois que o whatsapp é popular agora, a maioria dos dispositivos vem como aplicativo nativo e aplicativo nativo não será eliminado. No meu samsung s8 eu não consigo desinstalar o whatsapp, o modo de economia de energia não pode matá-lo

Nasir
fonte