Message in a Bottle

Mobile Messaging: Google Cloud Messaging Service

Arne Limburg, Lars Röwekamp

© Shutterstock.com/elnavegante

Die Situation, dass eine mobile App mit einem Server kommuniziert, kommt in der Praxis recht häufig vor. Normalerweise wird die Kommunikation dabei vom Client (also der App) initiiert. Abgesehen von ein paar kleinen Stolpersteinen, etwa einer nicht vorhandenen Netzwerkverbindung, ist eine solche Kommunikation mit Android recht leicht zu realisieren.

Spannender gestaltet es sich, wenn die Kommunikation vom Server gestartet werden soll. Die Situationen, die es hier zu beachten gilt, sind deutlich vielfältiger: Ist das Handy gerade online? Ist es vielleicht gar nicht zu erreichen, weil es keine Netzwerkverbindung hat oder komplett ausgeschaltet ist? Ist es im Schlafmodus und wenn ja, soll die Nachricht auch im Schlafmodus zugestellt werden? Wenn das Handy sie erhält, soll es direkt aufwachen oder erst reagieren, wenn der User es aufweckt? Wenn das Handy nicht erreichbar ist, soll das Zustellen der Nachricht wiederholt werden?

Selbst eine Serverinfrastruktur, die mit all diesen Situationen umgehen kann, ist umfangreich und teilweise unmöglich umzusetzen – man denke an das Zustellen von Nachrichten an schlafende Handys. Hier schafft der Google Cloud Messaging Service Abhilfe.

Der Google Cloud Messaging Service (GCM) ist der Nachfolger des Mitte 2012 eingestellten Diensts „Android Cloud to Device Messaging Framework“. Er ermöglicht es, Nachrichten vom eigenen Server auf Android-Devices zu schicken. Der eigene Server schickt dabei eine Nachricht an den Google-Cloud-Messaging-Server, der diese an das Device weiterleitet. Der Vorteil dieses Umwegs ist, dass der Google-Cloud-Messaging-Server Nachrichten auch vorhalten kann, falls der Client gerade nicht erreichbar ist, und dass er Geräte auch dann erreichen kann, wenn sie sich gerade im Stand-by-Modus befinden. Je nach Implementierung des Clients kann das Gerät dann aufgeweckt werden oder die Nachricht vorhalten, bis der Benutzer es aktiv aufweckt. Technisch geschieht dies dadurch, dass der Android-Client bei einer eingehenden Nachricht ein Broadcast-Event schickt. Die zugehörige App kann dann programmatisch entscheiden, ob sie das Gerät aufweckt oder die Nachricht nur zur späteren Verwendung speichert.

Beim Versenden einer Nachricht kann der Sender (also i. d. R. der eigene Server) entscheiden, wie der Google Cloud Messaging Service mit der Situation umgehen soll, dass der Client gerade nicht verfügbar ist. Soll die Nachricht vorgehalten werden, bis sich der Client wieder meldet? Wie soll verfahren werden, wenn mehrere Nachrichten auflaufen, während der Client offline ist?

Soll nur die letzte Nachricht zugestellt werden oder ist jede Nachricht wichtig? Falls die Nachricht nur eine Information an den Client ist, dass sich der Zustand auf dem Server geändert hat (z. B. „Es gibt ein Update“), so sind Send-to-Sync-Nachrichten sinnvoll. Dabei handelt es sich um Nachrichten, bei denen immer nur die neueste Nachricht zugestellt wird, falls der Client offline war. Sie werden daher auch collapsible genannt. In der Regel baut der Client daraufhin selbst eine Verbindung zum Server auf, um die aktualisierten Informationen herunterzuladen. Bis zu vier verschiedene Arten von collapsible-Nachrichten kann der GCM-Service pro Client vorhalten.

Bei der anderen Variante werden die aktualisierten Daten direkt mit der GCM-Nachricht übertragen. Dies ist bei Daten bis zu 4 Kb möglich. In diesem Fall muss natürlich jede Nachricht zugestellt werden, die der GCM-Server entgegengenommen hat, während der Client offline war.Zusätzlich gibt es die Möglichkeit, beim Verschicken der Nachrichten eine maximale Vorhaltezeit auf dem Server anzugeben. Ist diese verstrichen, löscht der GCM-Server die Nachricht automatisch. Außerdem bietet Google Cloud Messaging die Möglichkeit, alle genannten Nachrichtenarten auch als Broadcast-Nachrichten an mehrere Geräte gleichzeitig zu verschicken.

Neue Features

Google entwickelt den Cloud Messaging Service kontinuierlich weiter. So wurden auf der diesjährigen Google IO neue Features des Cloud Messaging Service vorgestellt. Die drei größten Neuerungen sind clientseitige XMPP-Verbindungen, userbezogene Nachrichten und Nachrichtenquittierung.

Standleitung

Mit XMPP-Verbindungen ist es möglich, dass die Clients eine dauerhafte Verbindung zum Google-Server offenhalten. Das bietet den Vorteil, dass nicht bei jeder Nachricht eine neue Netzwerkverbindung aufgebaut wird, was die Batterie schont. Zur Kommunikation zwischen eigenem Server und Google-Server wurde dieses Protokoll (neben HTTP) bereits länger unterstützt. Jetzt ist damit zusätzlich eine Client-to-Server-Kommunikation (über den Google-Server) über XMPP möglich.

Userbezogene Nachrichten

Mittlerweile hat jeder User in der Regel mehrere Devices. Da kann es durchaus vorkommen, dass das Senden einer Nachricht an eine App mehr als Spam denn als Information empfunden wird, und zwar dann, wenn dieselbe Nachricht auf jedem Device gleichzeitig ankommt. Mit dem neuen User-Notification-API ist es daher nun möglich, Nachrichten nicht mehr nur pro Device, sondern pro User zu versenden.

Return to Sender

Wie bereits geschrieben, hält der Google-Server Nachrichten vor, falls der Empfänger gerade offline ist. Sie werden zugestellt, sobald sich der Empfänger wieder beim GCM-Server meldet. Sendet der eigene Server also über Google Cloud Messaging eine Nachricht an einen Client, so kann er nie sicher sein, wann diese tatsächlich zugestellt wird. Hier hilft ein weiteres neues Feature des GCM Service weiter, nämlich die receipt notifications. Der GCM-Server kann über ein Flag angewiesen werden, den eigenen Server zu informieren, sobald die Nachricht zugestellt wurde.

Fazit

Es gibt verschiedene Technologien, um Server-to-Client-Kommunikation zu realisieren. Dazu gehören WebSocket oder Long-Polling. Diese basieren jedoch darauf, dass der Client aktiv eine Verbindung zum Server offen hält. Das ist batterieintensiv und funktioniert nicht, wenn der Benutzer das Handy in den Schlafmodus versetzt. Die einzige Möglichkeit, dies zu erreichen, ist der in dieser Kolumne vorgestellte Google Cloud Messaging Service. Dieser bietet darüber hinaus die hier erläuterten Features des Vorhaltens der Nachrichten, falls der Client nicht erreichbar ist. Dabei wird optional immer nur die aktuelle Nachricht vorgehalten oder alle gesendeten. In diesem Jahr neu hinzugekommene Features sind XMPP, userbezogene Nachrichten und Sendebestätigungen (receipt notifications). Aus technischer Sicht lässt der GCM Service also mittlerweile keine Wünsche offen.

Wie bei allen Google Services bleibt das Problem des Vendor-Lock-ins: Verwendet man Google Cloud Messaging, ist man an Google gebunden und z. B. eventuellen Änderungen der AGBs hilflos ausgeliefert. Eine Veröffentlichung der App in einem alternativen App Store (z. B. dem Amazon Store) fällt dann auch automatisch weg. Hier muss man auf alternative Lösungen mit separatem API zurückgreifen, die es aber auch gibt (z. B. das Amazon Device Messaging).

Hat man sich allerdings einmal zu dem Schritt des Vendor-Lock-ins entschieden, erhält man mit dem Google Cloud Messaging Service einen von Featureumfang und Qualität her sehr gut aufgestellten Service zur Server-to-Client-Kommunikation.

Verwandte Themen:

Geschrieben von
Arne Limburg
Arne Limburg
Arne Limburg ist Softwarearchitekt bei der open knowledge GmbH in Oldenburg. Er verfügt über langjährige Erfahrung als Entwickler, Architekt und Consultant im Java-Umfeld und ist auch seit der ersten Stunde im Android-Umfeld aktiv.
Lars Röwekamp
Lars Röwekamp
Lars Röwekamp ist Gründer des IT-Beratungs- und Entwicklungsunternehmens open knowledge GmbH, beschäftigt sich im Rahmen seiner Tätigkeit als „CIO New Technologies“ mit der eingehenden Analyse und Bewertung neuer Software- und Technologietrends. Ein besonderer Schwerpunkt seiner Arbeit liegt derzeit in den Bereichen Enterprise und Mobile Computing, wobei neben Design- und Architekturfragen insbesondere die Real-Life-Aspekte im Fokus seiner Betrachtung stehen. Lars Röwekamp, Autor mehrerer Fachartikel und -bücher, beschäftigt sich seit der Geburtsstunde von Java mit dieser Programmiersprache, wobei er einen Großteil seiner praktischen Erfahrungen im Rahmen großer internationaler Projekte sammeln konnte.
Kommentare

Hinterlasse einen Kommentar

1 Kommentar auf "Mobile Messaging: Google Cloud Messaging Service"

avatar
4000
  Subscribe  
Benachrichtige mich zu:
Matthias Krieg
Gast

Die Veröffentlichung einer App mit GCM im Amazon App-Shop ist durchaus möglich. GCM funktioniert auch für eine aus dem Amazon App-Shop installierte App, sofern die Google Play Services auf dem Gerät verfügbar sind.