Wie funktionieren Push-Benachrichtigungen?

25

Ich frage mich, wie das Push-Benachrichtigungssystem funktioniert.

Gibt es eine aktive TCP / IP-Verbindung, die im Hintergrund zu Google-Servern ausgeführt wird?

opc0de
quelle
1
Siehe Wikipedia - was zugegebenermaßen etwas schwer zu lesen ist. Grundsätzlich und in einfachen Worten ausgedrückt: Der Client stellt eine Verbindung zum Server her und bittet um Information - und die Antwort kommt dann "verzögert", wenn Informationen verfügbar sind (oder nie, wenn keine verfügbar sind), gefolgt von einem neue Anfrage. Ja, dies erfordert eine permanente TCP / IP-Verbindung im Hintergrund, die an Ihrem Akku knabbert.
Izzy
@Izzy das kann nicht richtig sein, weil (1) die Dokumentation sagt, dass ein Intent erstellt wird, wenn die Nachricht eintrifft, und (2) was kann unter Android eine Verbindung aufrecht erhalten, die Android niemals beenden kann?
Michael
@Michael Welche Dokumente? Ich bin kein Android-Programmierer, um die Tiefe zu verstehen (und dies ist kein Diskussionsforum), daher kann ich hier wahrscheinlich nicht mit Ihnen streiten. Ich habe gehört , dass Hörer (für Übertragung) dynamisch aufgebaut werden kann - aber ich habe nie gehört , dass über Absichten (IMHO sie werden müssen , erklärt in der Manifest). Ich könnte mir gut vorstellen, dass ein Google-Dienst "echte Arbeit" leistet und die App einfach einen "Empfänger" registriert. Die obige Beschreibung war eher "allgemein", nicht Android-spezifisch, und ich habe versucht, es einfach zu halten;)
Izzy

Antworten:

25

Ja, Android stellt eine aktive Verbindung zu den Servern von Google her, verbraucht jedoch nicht viel Strom und Daten, da erst dann Datenverkehr gesendet wird, wenn eine GCM-Nachricht an eine App auf Ihrem Telefon gesendet wird. Es gibt nur eine Verbindung auf dem Telefon, die von allen Apps verwendet wird: Wenn Sie eine neue App installieren, die GCM verwendet, wird keine zusätzliche Last hinzugefügt.

Der erste Schritt in GCM besteht darin, dass ein Drittanbieter-Server (z. B. ein E-Mail-Server) eine Anfrage an den GCM-Server von Google sendet. Dieser Server sendet die Nachricht dann über diese offene Verbindung an Ihr Gerät. Das Android-System überprüft die Nachricht, um festzustellen, für welche App sie bestimmt ist, und startet diese App. Die App muss bei Android registriert sein, um GCM verwenden zu können, und über die entsprechende Berechtigung verfügen. Beim Start der App wird möglicherweise sofort eine Benachrichtigung mit den Daten aus der Nachricht erstellt. Die Größe von GCM-Nachrichten ist sehr begrenzt, sodass die App möglicherweise stattdessen eine normale Verbindung zum Server eines Drittanbieters herstellt, um weitere Informationen abzurufen (z. B. das Herunterladen der Header neuer E-Mails).

Die Verwendung von Push-Benachrichtigungen hat den Vorteil, dass Apps nicht in regelmäßigen Abständen ausgeführt werden müssen, um nach neuen Daten zu suchen. Dies spart Strom und Daten. Der Vorteil eines zentralisierten Mechanismus wie GCM ist, dass das Gerät nur eine offene Netzwerkverbindung benötigt und das Android GCM-System das einzige ist, das weiter ausgeführt werden muss, anstatt dass jede App im Hintergrund ausgeführt werden muss, um ihr eigenes Netzwerk aufrechtzuerhalten Verbindung zu einem eigenen Server.

Dan Hulme
quelle
Ich möchte nur einen Kommentar hinzufügen: GCM-Nachrichten können eine Größe von 4 KB haben, sie sind also nicht so eingeschränkt. developer.android.com/google/gcm/gcm.html
Moszi
Was hält diese Verbindung offen? Alle Android-Aktivitäten oder -Dienste können jederzeit beendet werden.
Michael
1
Danke für die Information. Weißt du laut meiner Frage , wie lautet die URL eines geöffneten Sockets? (URL der Verbindung vom Gerät zu GCM-Servern, die geöffnet ist und für Benachrichtigungsdaten verwendet wird)
Sabeti,
6

Android OS verwendet jetzt GCM (Google Cloud Messaging) für Push Notification WS. Sie können eine bessere Idee hier ; Sie erhalten einen Überblick über die Architektur des Full Push Notification Service mit seinem Lebenszyklus.

Hoffe es wird helfen.

Bhavesh
quelle
Gibt es eine Möglichkeit, etwas Ähnliches zu tun, ohne sich auf die Server von Google verlassen zu müssen?
Michael
@Michael Verwenden Sie Amazon Cloud-Dienste? Sie scheinen ein vergleichbares Konzept zu haben. Aber für das "How to" ist dies der falsche Ort;)
Izzy
1

Späte Antwort auf alte Frage, aber es lohnt sich, sie zu stellen.

GCM wurde im April 2018 ausgemustert und Google hat empfohlen, stattdessen FCM zu verwenden, das GCM ähnelt.

  1. Wir müssen keine eigene Registrierungs- oder Abonnementwiederholungslogik schreiben
  2. Sie können Firebase Notifications verwenden, eine Lösung für serverlose Benachrichtigungen mit einer Webkonsole, mit der jeder basierend auf den Erkenntnissen von Firebase Analytics Benachrichtigungen an bestimmte Zielgruppen senden kann.
  3. Es verfügt über die Kerninfrastruktur von GCM.
  4. Eine einzelne Nachricht kann eine Nutzlast von bis zu 4 KB an eine Client-App übertragen.
Ajay Deepak
quelle
1
Aus Sicht der App ist FCM nicht mit GCM vergleichbar, sondern identisch. FCM ist nur der neue Name von GCM.
Robert