Wie kann WhatsApp Nachrichten empfangen, wenn sie nicht verwendet werden?


23

Ich bin gespannt, wie WhatsApp Nachrichten empfangen kann, wenn sie nicht verwendet werden.

Ich verstehe, dass WhatsApp über die Internetverbindung und nicht über das Mobilfunknetz funktioniert. Stellen Sie sich vor, ich hätte mein Telefon seit Stunden nicht mehr berührt. In diesem Moment schickt mir ein Freund eine Nachricht auf WhatsApp. Ich verstehe es sofort. Bedeutet das, dass WhatsApp die Internetverbindung jederzeit aufrechterhält? Bedeutet das, dass WhatsApp als Server fungiert und Ports auf dem Telefon öffnet? Oder vielleicht eine lang laufende HTTP-Anfrage?



Antworten:


18

Zuerst dachte ich, dass dies höchstwahrscheinlich eine Instanz der Android-Cloud für Geräte-Messaging ist , aber es kann nicht sein: WhatsApp deklariert nicht die erforderlichen Berechtigungen und funktioniert in Eclair (Android 2.1), während die Cloud für Geräte-Messaging ( und sein Ersatz, Google Cloud Messaging) erfordern mindestens Froyo (Android 2.2).

Es handelt sich jedoch höchstwahrscheinlich um eine Art Push-Benachrichtigungsdienst . Ohne Zugriff auf den Quellcode von WhatsApp ist es unmöglich, genau zu sagen, wie es implementiert ist.

Der Teil darüber, dass Nachrichten empfangen werden können, wenn sie nicht verwendet werden, ist jedoch relativ einfach zu erklären. Die App verfügt mit ziemlicher Sicherheit über einen Dienst , der im Hintergrund ausgeführt wird, um sich regelmäßig beim Server zu melden (oder den Server-Push zu empfangen oder was auch immer). Wenn Sie eine Nachricht erhalten, wird vom Dienst eine Benachrichtigung angezeigt.

Was die Frage betrifft, wie der Server einen Push ausführen kann, gibt es hier eine Möglichkeit (ich kann es auch ohne Quellcode nicht überprüfen):

  1. WhatsApp startet und öffnet zwei Sockets: einen zum Abhören und einen zum Senden einer Nachricht an den Server.
  2. WhatsApps beginnt beim ersten Socket zu lauschen.
  3. WhatsApp sendet eine Nachricht mit Ihrer Telefonnummer und dem Port des Listening Sockets an den Server und wartet auf eine Bestätigung.
  4. Der Server zeichnet die Telefon- und Portnummern in der Nachricht und die IP-Adresse auf, von der die Nachricht stammt.
  5. Der Server sendet eine Bestätigung an die App.
  6. Die App erhält die Bestätigung und schließt den Nachrichten-Socket.
  7. Auf dem Server kommt eine Nachricht mit Ihrer Telefonnummer als Ziel an.
  8. Der Server verwendet die IP-Adresse und die Portnummer, die er Ihrer Telefonnummer zugeordnet hat, und verwendet diese Informationen, um die Nachricht an Ihr Telefon zu senden.

Damit dies funktioniert, muss die App den Status der Netzwerkverbindung überwachen und den Listening-Socket zurücksetzen / die Registrierungsnachricht bei Bedarf erneut senden (wenn sich beispielsweise die IP-Adresse ändert).


2
Ist WhatsApp von der Playstore-App abhängig? Zitat aus dem Wikipedia-Link: Es werden Geräte mit Android 2.2 oder höher benötigt, auf denen auch die Market-Anwendung installiert ist. Es mag also nicht genau das sein, aber es basiert sicherlich auf den gleichen Prinzipien. Vielleicht möchten Sie jedoch einen Auszug aus dem zweiten Absatz des Artikels einfügen, um Ihre Antwort wertvoller zu machen (und mehr Gegenstimmen zu erhalten;)
Izzy

Sie haben völlig recht, @Izzy, ich hätte mehr Details hinzufügen sollen. Es war allerdings schwierig, während ich bei Subway saß und auf meinem SGS3 schrieb. Ich habe die Antwort jetzt aktualisiert. :-)
Trebor Rude

3
Nat wird Schritt 8 nicht zulassen, auch wenn sich das Handy auf einer statischen IP befindet, was niemals der Fall sein wird. Die möglichen Wege sind entweder Xmpp oder langes Polling http

1
Es hat die erforderliche Berechtigung. Es wird im Play Store als "Daten aus dem Internet empfangen" aufgeführt. Siehe android.stackexchange.com/a/61794
nyuszika7h

2
Leider sind eingehende TCP-Verbindungen auf Mobilgeräten so gut wie unmöglich. Die überwiegende Mehrheit von ihnen verfügt nicht über öffentliche IP-Adressen, und selbst wenn dies der Fall ist (z. B. für IPv6-fähige Betreiber), werden eingehende Verbindungen in der Regel gefiltert. Die meisten Anwendungen verwenden heutzutage entweder die Push-Dienste von Google oder rollen ihre eigene dauerhafte Client-zu-Server-Socket-Verbindung (insbesondere Facebook). Nach meiner Erfahrung scheint WhatsApp einen hybriden Ansatz zu verfolgen: Wenn GCM verfügbar ist, wird der persistente Socket geschlossen, nachdem er einige Minuten lang inaktiv war.
lxgr

8

Ich bin mir sicher, dass WhatsApp KEINE Listening Ports öffnet. Die meisten ISPs blockieren eingehende Anfragen, das würde nicht funktionieren.

WhatsApp hat einen Service. Grundsätzlich bedeutet dies, dass Sie WhatsApp technisch gesehen nie beenden. Die Art und Weise, wie Sie Nachrichten empfangen, während Sie WhatsApp "nicht ausführen", entspricht genau der Art und Weise, wie Sie sie empfangen, wenn Sie WhatsApp ausführen.

Der Client, in diesem Fall WhatsApp, stellt eine Verbindung zum Server her. Der Client behält diese Verbindung bei. Wenn der Server etwas Neues zu sagen hat, sendet er es über diese Verbindung an den Client. Und das ist alles.

Deine erste Vermutung ist richtig.

WhatsApp keinen wahren Protokollmechanismus hat, sieht dies .

WhatsApp hat keinen Abmeldemechanismus. Die Anwendung ist so konzipiert, dass sie immer verbunden ist, sodass Sie Ihre Nachrichten auch dann schnell erhalten, wenn Sie Ihr Telefon nicht aktiv nutzen. Dies funktioniert ähnlich wie SMS und ermöglicht die sofortige Zustellung von WhatsApp-Nachrichten.


2
Ihr Link ist für Nokia - ich konnte keine ähnliche Frage für Android auf ihrer Website finden. Sind Sie sicher, dass dies auch für Android gilt? Diese Frage aus den häufig gestellten Fragen zu Android weist darauf hin, dass eine PUSH-Architektur verwendet wird (im Abschnitt "Dauern Nachrichten immer noch zu lange, um Ihr Telefon zu erreichen?") - und nicht ein ständig verbundener Server / Client.
Dylan Yaga

2
@DylanYaga ist richtig. Siehe z. B. den letzten Absatz dieser Antwort und die Antwort von Trebors hier .
Izzy

Dies scheint am logischsten zu sein. Oft werden diese Dienste als Push-Dienste bezeichnet, aber ich kann mir nicht vorstellen, dass der Client einen Port öffnet und tatsächlich als lokaler Server fungiert. Das würde sicherlich Sicherheitsprobleme verursachen.
SPRBRN

1

Ihre FAQ deuten darauf hin, dass sie GCM verwenden. Überprüfen Sie die Antwort auf "Dauern Nachrichten immer noch zu lange, um Ihr Telefon zu erreichen?"


Sie haben Recht, dass die FAQ dies nahelegt, aber wie Trebor Rude betont, verfügt die App nicht über die erforderlichen Berechtigungen, sodass sie GCM selbst nicht verwenden können.
Dan Hulme

2
Es hat die erforderliche Berechtigung. Es wird im Play Store als "Daten aus dem Internet empfangen" aufgeführt. Siehe android.stackexchange.com/a/61794
nyuszika7h

2
Nach allem, was ich gesehen habe, verwenden sie GCM, wenn es verfügbar ist. Wenn es aus irgendeinem Grund nicht verfügbar ist (z. B. auf einem Gerät ohne Play-Dienste oder wenn es vom Netzwerk gefiltert wird), bleibt der Socket unbegrenzt in der Nähe.
lxgr

0

WhatsApp wird wie andere Apps als Dienst ausgeführt. (Sie sind immer verbunden.) An Sie gesendete Nachrichten werden bis zu 30 Tage auf dem WhatsApp-Server gespeichert. In dieser Zeit sollte WhatsApp aktiv sein, um den Empfang der Nachricht zu bestätigen. Einzelne Accounts werden unter der Benutzertelefonnummer @ whatsapp.net gespeichert


1
30 tage . Bitte verlinken Sie die Quelle für diese Tatsache
Beeshyams

0

Ich denke es sollte so sein:

Als WhatsApp neu war, hätte es eine PNS-basierte Lösung verwendet. Dieser PNS hat das Gerät nur aufgeweckt und kann nach dem Aufwecken eine Socket-Verbindung zum WhatsApp-Server herstellen.

Wenn WhatsApp jetzt populär ist, werden die meisten Geräte, die als native Anwendung und native Anwendung kommen, nicht getötet. In meinem Samsung S8 kann ich WhatsApp nicht deinstallieren, Energiesparmodus kann es nicht töten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.