Mobile Anwendungen Google Cloud Messaging 1. Allgemeines zu Google Cloud Messaging (GCM): - 60% der Top 100 Apps nutzen Google Cloud Messagging - 200.000 Messages pro Sekunde = 17 Milliarden Messages pro Tag - 60ms Latency - Teil der Google Play Services 2. Vorgänger von GCM - Cloud to Device Messaging (C2DM): Hat nur einen einfachen send to synch Mechanismus verwendet: - Server sendet Update-Message zum C2DM-Server - C2DM-Server benachrichtigt Client - Client muss Verbindung zum Server aufbauen um Message abzuholen Autor: Simon Holzmann Vorteil: Client muss nicht ständig pollen Nachteil: Nicht gedacht für große Datenmengen
3. Seit 2012 - Google Cloud Messaging (GCM): Neuerungen im Vergleich zu C2DM: - Clients erhalten Messages direkt vom GCM-Server - Message Multicasting - bis zu 1000 Clients können gleichzeitig benachrichtigt werden - Expiring Messages - Nachrichten haben eine TimeToLive (TTL) - Messages with Payload Nachrichten können bis zu 4K groß sein 4. Funktionalität von GCM: - Eine App sendet registration request an GCM Server (beinhaltet ProjectID) - Der GCM-Server generiert eine RegID und sendet sie zurück an die App - Die App sendet die RegID an den Server Sever kennt die RegIDs bzw. Devices Der Server sendet eine Message nur einmal, inkl. RegIDs, direkt an den GCM-Server Der GCM-Server liefert die Message an alle Apps mit entsprechenden RegIDs aus Falls User die App deinstalliert hat: - Der Server schickt wie gewohnt eine Message direkt an den GCM-Server - Der GCM-Server versucht die Message an den Client zu senden - Client Antwortet dem GCM Server, dass die RegID gelöscht wurde - Die RegID wird dann beim GCM-Server verworfen - Bei weiteren Messages erhält der Server einen message bounce (RegID invalid) -
5. Google Cloud Messaging im Detail: 5.1 Vorbereitung: Zunächst muss man in der Google API Console: - Den GCM-Service aktivieren - Einen API Key generieren Benötigt werden: - die ProjectID (steht in der URL) - API Key ProjectID und API Key fungieren ähnlich wie ein Username und Passwort
5.2 Registrierung einer App beim GCM Server: Die App sendet einen Intent an das GCM-Framework (beinhaltet die ProjectID). Das GCM-Framework kommuniziert dann mit GCM-Server. Einfaches Beispiel Registrierung mit ProjectID: Danach generiert der GCM-Server eine RegId und sendet sie zurück zum GCM-Framework. Das GCM-Framwork sendet RegID weiter an die App mittels eines Intents.
Um die RegID zu bekommen wird eine abgeleitete Klasse der GCMBaseIntentService Klasse implementiert. So hat man einen direkten Zugriff auf die RegID indem man die onregistred(); Methode überschreibt. Die RegID kann man nun weiter an den Server senden. 5.3 Messages empfangen: Messages können durch das überschreiben der Methode onmessage(); empfangen werden. Dabei wird ein Intent übergeben aus dem die Payload mittels der getextras(); Methode extrahiert wird.
5.4 Permissions für GCM: Es wurde eine eigene Permission für GCM eingeführt, die der User akzeptieren muss, da eine Internetverbindung notwendig ist. 5.6 Die Server Anwendung: Der Server bekommt wie oben beschreiben die RegID vom Client. Zusätzlich muss auf dem Server der API Key hinterlegt sein. Um eine neue Message an die Clients zu versenden, schickt der Server die Message zusammen mit dem API Key und den RegIDs an den GCM-Server. Der GCM-Server schickt den API Key weiter an einen Authentifizierungs-Server. Dieser Prüft den API Key und schickt die zugehörige ProjectID zurück zum GCM-Server. Der GCM-Server hat noch die ProjectID der App aus dem Registrierungsprozess. Diese wird mit der ProjectID vom Auth-Server abgeglichen. Bei erfolgreicher Übereinstimmung der ProjectIDs, sendet GCM-Server die Message an die Clients mit den entsprechenden RegIDs.
Um Messages vom Sever zu senden, wird eine einfache HTTP Anfrage an den GCM Server geschickt GCM Server versteht JSON oder Plaintext. Die Anfrage muss den API Key enthalten und alle RegIDs die eine Message erhalten sollen. In der Antwort des GCM-Server sind dann folgende Infos enthalten: - Anzahl der erfolgreich, gesendeten Messages - Anzahl der fehlgeschlagenen, gesendeten Messages - Eine Liste mit MessageIDs und zugehörigem Statuscode
6. Sonstige Features von GCM: - Es ist möglich eine App bei mehreren eigenen Servern zu registrieren - Message expiring via Time to Live o zwischen 0-4 Wochen o default 4 Wochen o bei 0 werden Messages instantan geschickt oder verworfen, falls device offline - Delay while Idle (sendet keine Messages wenn Divice nicht aktiv) - Messages mit Payload o GCM Server cached alle Messages, falls Device offline o Wenn device online, alle Messages werden geschickt o Eine Message kann max 4K groß sein o Es werden bis zu 100 Messages gecached - Zuverlässigkeit durch ACK von Client sobald Message erhalten wurde - Batterieeffizienz durch Message Throttle Queue und Delay - Analyse eigener Messages via Dev-Console 7. Neue Features seit 2013 - Persistent connections (persistente Verbindung für große Datenmengen) - Upstream messaging (App können messages zum Server senden) - notification synchronisation (notifacations Synchronisisert auf mehreren Devices) Quellen: http://developer.android.com/google/gcm/gs.html https://developers.google.com/events/io/2012/sessions/gooio2012/100/ https://developers.google.com/events/io/sessions/324893448