Wie funktioniert die Push-Benachrichtigungstechnologie unter Android?

218

Wie hat Google die Push-Benachrichtigungsfunktion implementiert? Funktioniert es durch Abfragen, die von einem Dienst ausgeführt werden, der im Hintergrund oder auf andere Weise ausgeführt wird?

Khawar Raza
quelle
24
Klingt für mich nach einer echten Frage. Ich habe mich über die Antwort gewundert und Google hat mich hierher gebracht. Wieder wurde eine weitere Qualitätsfrage geschlossen.
Tino Mclaren
1
Ich möchte das auch wissen und hatte vor, eine Frage zu schreiben, aber es gibt diese bereits, also ist es definitiv eine gute Frage.
Igor Čordaš

Antworten:

170

Nach dem, was ich während einer Android-Entwicklerkonferenz in Israel gehört habe:

Auf einem Cloud-Google-Server wartet einfach ein TCP-Socket im Akzeptanzmodus . Die TCP-Verbindung wurde von der Google Play-Anwendung initiiert. Aus diesem Grund muss Google Play auf dem Gerät installiert sein, damit Google Cloud Messaging (GCM) (ehemals C2DM (Android Cloud to Device Messaging Service )) funktioniert.

Wenn dieser TCP-Client-Socket eine Nachricht empfängt, enthält die Nachricht Informationen wie den Paketnamen der Anwendung, an die er adressiert werden soll, und natürlich die Daten selbst. Diese Daten werden analysiert und in eine Absicht gepackt , die gesendet und schließlich von der Anwendung empfangen wird.

Der TCP-Socket bleibt geöffnet, auch wenn der Funkstatus des Geräts in den "Leerlauf" -Modus wechselt. Anwendungen müssen nicht ausgeführt werden, um die Absichten zu erhalten.

Weitere Informationen finden Sie unter http://developer.android.com/google/gcm/gcm.html

Tal Kanel
quelle
1
Aber ich denke, es funktioniert auch mit dem Emulator. Mir fällt ein, dass das Gerät den Server mit seinem aktuellen Pfad (IP) auf dem neuesten Stand hält. Wenn der Google Server eine Benachrichtigung senden muss, nimmt er seinen aktuellen Pfad und leitet die Nachricht an diesen Pfad weiter. Habe ich bis zu einem gewissen Grad recht?
Khawar Raza
2
@Khawar Raza: Wenn sich die IP des Geräts aus irgendeinem Grund geändert hat, wird die Verbindung zum Gerät getrennt. wenn es passiert - stattdessen neue Verbindung astemblish, basierend auf der neuen IP des Geräts.
Tal Kanel
1
@ Khawar Raza: Der Emulator funktioniert auch ohne Google Play. Ich denke, es initiiert diesen intern eingebauten Socket anstelle von Google Play
Tal Kanel
2
Aha. Das wäre eigentlich ziemlich interessant, ich frage mich, ob das stimmt.
you786
2
Es wird also immer noch abgefragt, aber die gute Seite ist, dass die Abfrage von Google Play zentralisiert wird.
Accollativo
143

Android behält eine aktive Verbindung zu den Servern von Google bei, verbraucht jedoch nicht viel Strom oder Daten, da kein Datenverkehr gesendet wird, bis eine GCM-Nachricht (Google Cloud Messaging) an eine App auf Ihrem Telefon gesendet wird. Es gibt nur eine Verbindung auf dem Telefon, die von allen Apps verwendet wird: Durch die Installation einer neuen App, die GCM verwendet, wird keine zusätzliche Last hinzugefügt.

Der erste Schritt in GCM besteht darin, dass ein Server eines Drittanbieters (z. B. ein E-Mail-Server) eine Anfrage an den GCM-Server von Google sendet. Dieser Server sendet dann die Nachricht ü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 sich bei Android registriert haben, um GCM verwenden zu können, und sie muss über die entsprechende Berechtigung verfügen. Wenn die App gestartet wird, 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 zu erhalten (z. B. das Herunterladen der Header neuer E-Mails).

Der Vorteil der Verwendung von Push-Benachrichtigungen besteht darin, dass Apps nicht in regelmäßigen Abständen ausgeführt werden müssen, um nach neuen Daten zu suchen. Dies spart sowohl Strom als auch Daten. Der Vorteil eines zentralisierten Mechanismus wie GCM besteht darin, 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.

Entnommen aus: Quelle Siehe auch hier .

Aniket Thakur
quelle
1
Nur ein Kommentar zur GCM-Verbindung. Diese einzelne Verbindung ist eine Polling-Verbindung.
Wmac
1
Der entscheidende Teil für mich war, dass ein Server eines Drittanbieters, z. B. ein E-Mail-Server, tatsächlich eine Benachrichtigungsnachricht an Google GCM-Server sendet. Es handelt sich um einen Dienst, den Google kostenlos zur Verfügung stellt. Ein solcher Dritter muss einen Kommunikationskanal mit Google-Servern unter Verwendung seines GCN-Protokolls implementieren. Das Protokoll ist übrigens so ziemlich nur eine JSON-formatierte HTTP-Antwort. Ausführliche Informationen finden Sie unter developer.google.com/cloud-messaging .
Kyselejsyreček
10

Sie können die Push-Benachrichtigung auf Android selbst mit einer langen Abfrage-TCP-Verbindung implementieren. Dies würde jedoch die Aufrechterhaltung einer zusätzlichen Steckdose => Batterieentladung beinhalten. Oder Sie können in regelmäßigen Abständen eine Verbindung mit dem Alarm Manager herstellen.

Google öffnet wahrscheinlich eine Steckdose für alle C2DM-Push-Benachrichtigungen, wodurch die Batterie effizienter wird.

Shreesh
quelle
Es ist also bestätigt, dass der Client über eine TCP-Verbindung abfragt, oder? Wissen Sie, wie oft Daten abgefragt werden? ist es zum Beispiel alle 5 Sekunden. oder ist es schnell wie ein Herzschlag?
j2emanue
3

Ab dem 10. April 2018 hat Google GCM abgelehnt. Die GCM-Server- und Client-APIs sind veraltet und werden ab dem 11. April 2019 entfernt. Migrieren Sie GCM-Apps zu Firebase Cloud Messaging (FCM), das die zuverlässige und skalierbare GCM-Infrastruktur sowie viele neue Funktionen übernimmt.

https://firebase.google.com/docs/cloud-messaging/

user1767754
quelle
1

Ja, du hast Recht. Google hatte einen Dienst (GTalk-Dienst) und dieser Dienst fragte Google-Server in bestimmten Zeiträumen.

Yury
quelle
Ich weiß nicht. Ich habe gerade gelesen, wie C2DM funktioniert. Jetzt kann sich etwas ändern.
Yury
-3

Wenn Sie auf Android-Geräten Push-Benachrichtigungen erhalten, werden das Bild der Absenderanwendung und eine Meldung in der Statusleiste angezeigt. Genau wenn der Kunde auf die Benachrichtigung tippt, landet er auf der Anwendung.

Robert Manus
quelle
Es handelt sich um eine lange laufende TCP-Verbindung im Hintergrund. Dies wird in der Antwort nicht erläutert. Bitte halten Sie sich an die Fragen :)
Nishchal Gautam,