2014-04-10 5 views
5

Ich habe einen Android-App, die ich auf meinen Server mit REST API verbinden (django Rest Framework)Wie funktioniert GCM? (Google Cloud Messaging für Android)

hier ist ein Szenario (und mein Plan vielleicht):

  • Daten werden hin und her gesendet, wie JSON
  • Ich habe ein Benutzermodell und ein Aufgabenmodell, in denen Benutzer Besitzer einer Aufgabe sind.
  • Benutzer sendet typischerweise eine Aufgabe an einen anderen Benutzer (mit json ähnlich wie folgt: {"owner": "exampleuser", "von": "otheruser", "content": "example" ...} mit der POST-Methode) -Die Aufgaben haben ein boolesches Feld "abgeschlossen" und wird gelöscht, sobald die Aufgabe abgeschlossen ist (mit PUT oder PATCH-Methode: abgeschlossen = true)
  • sobald eine neue Aufgabe erstellt wird mit der POST-Methode, die einzige Möglichkeit, die Benutzer sehen können alle Aktivitäten, ihre Aufgaben in Bezug auf durch eine android-Aktivität ist, die GET-Methode verwendet eine Liste aller Aufgaben im Besitz des Benutzers zu erhalten, indem Sie alle Objekte, die von dem Benutzer

Also meine Fragen sind im Besitz aufzublicken:

  1. Anstatt den Benutzer die App immer zu überprüfen. Wie kann ich GCM verwenden, um den Benutzer zu benachrichtigen?
  2. Wie wird angezeigt, an welchen Benutzer oder an welches Gerät die Push-Benachrichtigung gesendet werden soll?
  3. Woher weiß GCM, wenn Änderungen an Aufgaben vorgenommen wurden oder wenn ein Benutzer eine Aufgabe POST anmeldet?

Antwort

7

Gemäß der GCM Implementierung erfordert es, dass Sie einen Remote-Server implementieren, die alle Anfragen verwalten wird, sowohl eingehende als auch ausgehende. Sie können dies einfach mit einem Web-Server tun, der als Webservice agiert, der (zum Beispiel) die Anfragen von den Clients mit einer HTTP POST Anfrage erhält, und die Verarbeitung entsprechend durchführt.

Anstatt den Benutzer die App immer zu überprüfen. Wie kann ich GCM verwenden, um den Benutzer zu benachrichtigen?

Dies wird von dem Server verwaltet, den ich gerade beschrieben habe. Es wird wissen, wer abonniert ist und wer die Benachrichtigungen erhalten soll.

Wie wird angezeigt, an welchen Benutzer oder welches Gerät die Push-Benachrichtigung gesendet werden soll?

Das gleiche gilt hier. Der Server sollte die Benutzer bei einer Subskription in einer Art von Speicher (z. B. einer SQL-Datenbank) speichern und auf diese Weise wissen, an wen Benachrichtigungen gesendet werden sollen. Dies bedeutet, dass Sie einen Timeout-Mechanismus implementieren müssen. In meinem Fall lasse ich Clients alle 30 Sekunden einen HTTP-POST dummy senden. Wenn ich diese Anfrage nicht in angemessener Zeit erhalte, denke ich, dass der Client eine Zeitüberschreitung hat und ich sie daher aus der Datenbank entferne.

Wie weiß GCM, wann Änderungen an Aufgaben vorgenommen wurden oder wann ein Benutzer eine Aufgabe POST anmeldet?

Die gleiche Geschichte, es wird alles vom Server behandelt. Sie implementieren die Logik, was bei jeder Anfrage passieren sollte.

Vielleicht möchten, dies lesen: How to send location of the device on server when needed

Und auch diese Referenzen:

+3

Wie schaltet GCM eine Nachricht vom Server in eine Absicht um, wenn die Anwendung möglicherweise nicht läuft? Was läuft unter Android, das nicht beendet werden kann (d. H. Es wird immer ausgeführt, wenn eine Nachricht eingeht), die diesen kritischen Schritt durchführt, sodass meine App von Intent gestartet wird? – Michael

27

Android hält eine aktive Verbindung zu den Servern von Google, aber es braucht nicht viel Energie oder Daten verwenden, da kein Verkehr auf sie gesendet wird, bis etwas sendet eine GCM-Nachricht an eine App auf Ihrem Telefon. 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 Drittanbieterserver (z. B. ein E-Mail-Server) eine Anforderung an den Google GCM-Server sendet. Dieser Server sendet die Nachricht dann über diese offene Verbindung an Ihr Gerät. Das Android-System überprüft die Nachricht, um zu ermitteln, für welche App es bestimmt ist, und startet diese App. Die App muss sich bei Android registriert haben, um GCM zu verwenden, 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. GCM-Nachrichten sind sehr klein, sodass die App stattdessen eine normale Verbindung mit dem Drittanbieterserver herstellen kann, um weitere Informationen zu erhalten (z. B. das Herunterladen der Header neuer E-Mails).

Der Vorteil von Push-Benachrichtigungen besteht darin, dass Apps nicht in regelmäßigen Abständen ausgeführt werden müssen, um nach neuen Daten zu suchen und Strom und Daten zu sparen. 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 weiterlaufen muss, anstatt dass jede App im Hintergrund laufen muss, um ihr eigenes Netzwerk zu behalten Verbindung zu einem eigenen Server.

+0

Danke für die Info. Laut [meine Frage] (http://stackoverflow.com/questions/33117827/parse-api-push-notifications-parse-com-gcm-urls-ips-protocols-and-orports), wissen Sie was ist die URL eines geöffneten Sockets? (URL der Verbindung von Gerät zu GCM-Servern, die für Benachrichtigungsdaten geöffnet und verwendet wird) –