In che modo WhatsApp è in grado di ricevere messaggi quando non viene utilizzato?


23

Sono curioso di sapere come WhatsApp è in grado di ricevere messaggi quando non in uso.

Voglio dire, capisco che WhatsApp funziona utilizzando la connessione Internet anziché la rete cellulare. Immagina di non toccare il telefono da ore. In quel momento, un amico mi invia un messaggio su WhatsApp. Lo capisco subito. Ciò significa che WhatsApp mantiene la connessione Internet sempre connessa? Ciò significa che WhatsApp funge da server, aprendo le porte sul telefono? O forse una richiesta HTTP di lunga durata?



Risposte:


18

Inizialmente, pensavo che questa fosse probabilmente un'istanza di cloud Android per dispositivi di messaggistica , ma non può essere: WhatsApp non dichiara le autorizzazioni necessarie e funziona in Eclair (Android 2.1), mentre la messaggistica da cloud a dispositivo ( e la sua sostituzione, Google Cloud Messaging) richiedono almeno Froyo (Android 2.2).

Tuttavia, è molto probabilmente una sorta di servizio di notifica push . È impossibile dire esattamente come è implementato senza accesso al codice sorgente di WhatsApp.

Tuttavia, la parte relativa alla possibilità di ricevere messaggi quando non in uso è relativamente semplice da spiegare. L'app ha quasi certamente un servizio che viene eseguito in background per effettuare periodicamente il check-in con il server (o ricevere il push del server o qualunque cosa faccia). Quando ricevi un messaggio, il servizio visualizza una notifica.

Per quanto riguarda la domanda su come il server potrebbe fare un push, ecco una possibilità (di nuovo, non posso verificare senza il codice sorgente):

  1. WhatsApp si avvia e apre due socket: uno per l'ascolto e uno per inviare un messaggio al server.
  2. WhatsApps inizia l'ascolto sul primo socket.
  3. WhatsApp invia un messaggio contenente il tuo numero di telefono e la porta della presa di ascolto al server e attende una conferma.
  4. Il server registra i numeri di telefono e di porta nel messaggio e l'indirizzo IP da cui proviene il messaggio.
  5. Il server invia un riconoscimento all'app.
  6. L'app riceve il riconoscimento e chiude il socket del messaggio.
  7. Un messaggio con il tuo numero di telefono come destinazione arriva nel server.
  8. Il server utilizza l'indirizzo IP e il numero di porta associati al numero di telefono e utilizza tali informazioni per inviare il messaggio al telefono.

Affinché ciò funzioni, l'app dovrebbe monitorare lo stato della connessione di rete e ripristinare la presa di ascolto / inviare nuovamente il messaggio di registrazione quando necessario (se l'indirizzo IP cambia, ad esempio).


2
Whatsapp dipende dall'app PlayStore? Citando dal link Wikipedia: richiede dispositivi che eseguono Android 2.2 o versioni successive che hanno anche l'applicazione Market installata. Quindi potrebbe non essere esattamente quello, ma certamente si basa sugli stessi principi. Potresti voler includere qualche estratto dal secondo paragrafo dell'articolo, tuttavia, per rendere la tua risposta più preziosa (e ricevere più voti;)
Izzy

Hai perfettamente ragione, @Izzy, avrei dovuto aggiungere ulteriori dettagli. Tuttavia, è stato difficile da fare mentre ero seduto alla Subway a scrivere sul mio SGS3. Ho aggiornato la risposta ora. :-)
Trebor Rude

3
Nat non consentirà il passaggio 8, anche se il cellulare è su IP statico, il che non sarà mai il caso. i modi possibili sono Xmpp o polling lungo http

1
Ha l'autorizzazione richiesta. È elencato come "ricevi dati da Internet" nel Play Store. Vedi android.stackexchange.com/a/61794
nyuszika7h

2
Sfortunatamente, le connessioni TCP in entrata sono quasi impossibili sui dispositivi mobili. La stragrande maggioranza di essi non dispone di indirizzi IP pubblici e, anche se lo sono (ad esempio per gli operatori abilitati per IPv6), le connessioni in entrata vengono generalmente filtrate. La maggior parte delle applicazioni oggi utilizza i servizi push di Google o esegue il roll del proprio client persistente alla connessione socket del server (in particolare Facebook). WhatsApp sembra adottare un approccio ibrido, nella mia esperienza: se GCM è disponibile, il socket persistente viene chiuso dopo essere rimasto inattivo per alcuni minuti.
lxgr,

8

Sono sicuro che WhatsApp NON apre alcuna porta di ascolto. la maggior parte degli ISP blocca le richieste in arrivo, che non funzionerebbero.

WhatsApp ha un servizio. Fondamentalmente ciò significa che tecnicamente non hai mai chiuso WhatsApp. Quindi, il modo in cui ricevi i messaggi mentre "non esegui" WhatsApp è esattamente lo stesso modo in cui li ricevi quando li esegui.

Il client, in questo caso WhatsApp, si connette al server. Il client mantiene quella connessione. Quando il server ha qualcosa di nuovo da dire, lo invia al client tramite quella connessione, e questo è tutto.

La tua prima ipotesi è corretta.

WhatsApp non ha un vero meccanismo di disconnessione, vedi questo .

WhatsApp non ha un meccanismo di disconnessione. L'applicazione è progettata per essere sempre connessa in modo da ricevere rapidamente i messaggi, anche quando non si utilizza attivamente il telefono. Questo è simile a come funziona l'SMS e consente la consegna quasi istantanea dei messaggi di WhatsApp.


2
Il tuo link è per Nokia: non sono riuscito a trovare una domanda simile per Android sul loro sito. Sei sicuro che lo stesso vale per Android? Questa domanda dalle loro Domande frequenti su Android indica che utilizza un'architettura PUSH (nella sezione "I messaggi impiegano ancora troppo tempo a raggiungere il telefono?") - piuttosto che un server / client costantemente connesso.
Dylan Yaga,

2
@DylanYaga è corretto. Vedi ad esempio l'ultimo paragrafo di questa risposta e la risposta di Trebors qui .
Izzy

Questo sembra il più logico. Molte volte questi servizi sono chiamati servizi push, ma non riesco a immaginare che il client possa aprire una porta e di fatto fungere da server locale. Ciò provocherebbe sicuramente problemi di sicurezza.
SPRBRN,

1

Le loro FAQ suggeriscono che usano GCM. Controlla la risposta a "I messaggi impiegano ancora troppo tempo a raggiungere il telefono?"


Hai ragione che le FAQ suggeriscono che, ma come sottolinea Trebor Rude, l'app non dispone delle autorizzazioni necessarie, quindi non può utilizzare GCM stesso.
Dan Hulme,

2
Ha l'autorizzazione richiesta. È elencato come "ricevi dati da Internet" nel Play Store. Vedi android.stackexchange.com/a/61794
nyuszika7h

2
Da quello che ho visto, usano GCM se è disponibile. Se non è disponibile per qualche motivo (ad es. Su un dispositivo senza servizi Play o se filtrato dalla rete), il socket viene mantenuto in modo indefinito.
lxgr,

0

Whatsapp come le altre app viene eseguito come servizio. (Sei sempre connesso) I messaggi inviati vengono archiviati sul server whatsapp fino a 30 giorni, entro i quali il tuo whatsapp deve essere attivo per ricevere e confermare la ricezione del messaggio. I singoli account vengono memorizzati con il numero di telefono dell'utente @ whatsapp.net


1
30 giorni . Si prega di collegare la fonte per questo fatto
Beeshyams

0

Penso che dovrebbe essere così:

Quando whatsapp era nuovo, avrebbe usato una soluzione basata su PNS, questo PNS avrebbe semplicemente riattivato il dispositivo e una volta svegliato, potrebbe creare una connessione socket al server whatsapp.

Dopo che whatsapp è popolare ora la maggior parte dei dispositivi arriva come applicazione nativa e l'applicazione nativa non verrà uccisa. Nel mio Samsung S8 non riesco a disinstallare Whatsapp, la modalità di risparmio energetico non può ucciderlo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.