Google Cloud Messaging (GCM) Tutorial

In diesem Beitrag geht es darum wie man Nachrichten via GCM an Apps verschicken kann. Viele Android Apps sind klassische Client/Server Anwendungen. Der Client tätigt Requests an einen Server und bekommt im besten Fall eine vernünftige Antwort. In anderer Richtung ist dies jedoch nicht so einfach. Wenn der Server Daten an 1 bis n Clients senden möchte ist das in diesem Szenario nicht so einfach. Mobiltelefone sind meist nicht über eine statische IP zu erreichen, es ist nicht sichergestellt, daß das Gerät mit dem Internet verbunden ist wenn eine Nachricht versendet wird. Wenn der Client regelmäßig den Server anpollt kostet das Bandbreite und elektische Leistung. Diese Probleme lassen sich elegant mit Google Cloud Messaging umgehen. Dabei registrieren sich die Clients mit einen NotificationKey beim Messaging Service. Falls die Clients benachrichtigt werden sollen schickt der Server eine Nachricht (maximal 4kb) an GCM. GCM erlaubt keine Broadcasts. Entsprechend müssen alle Clients sich für Benachrichtigungen registrieren.

Ablauf

  • Client registriert sich für Benachrichtigungen(GCMRegistrar.getRegistrationId)
  • Client sendet die ID an den Benachrichtigungsserver
  • Der Server sendet per HTTP die Mitteilung sowie alle zu benachrichigenden ID's an GCM
  • GCM sendet die Nachricht an alle Clients

Für GCM registrieren

Dafür musst Du ein Projekt in der Google API Console registrieren. Eine bebilderte Anleitung gibt es auf developer.android.com. Für's Programmieren brauchst du einen Browser Key (bei API Access erzeugen) und die Project Number (Overview) für die Clients.

Server einrichten

Für die Serverseite habe ich ein kleines Script geschrieben. Am besten legst Du 2 Scripte an.
  • send_multi_cast.php - um die Nachricht zu versenden
  • register_for_multi_cast.php - damit sich die Clients anmelden können. (Parameter per GET an registerForMulticast übergeben).
Die Klasse GoogleCloudMessagingHandler musst Du noch an den Datenbankadapter Deiner Wahl anpassen und die Tabelle in Deiner Datenbank anlegen.  

Clientseite

Hier habe ich das Projekt von Amol importiert. Bei Problemen muß die Gcm Library im Build Path aktiviert und ggfs. nach oben geschoben werden. Bildschirmfoto-Properties for SamplePushFalls Du die Projekt ID im Client änderst muß die App auf dem Gerät komplett deinstalliert werden. Was in diesem Beispiel fehlt ist das Registrieren am Server. Dafür habe ich einen Async Task geschrieben: In der ActivityMain muß dann nur noch die Klasse instanziiert und ausgeführt werden: new AsyncTaskRegisterForMultiCast(regId).execute("");

Test

Trage die Registration ID in die Datenbank ein (das fehlt in der Client Demo) und führe das PHP Snippet auf einem Webserver oder mit dem PHP Interpreter aus. Wenn Du ProjektId und Api Key richtig eingetragen hast sollte sowas dabei rauskommen:   Screenshot_2013-06-11-11-45-53  

Fin

Fragen? Ideen? Kommentar schreiben  

4 thoughts on “Google Cloud Messaging (GCM) Tutorial

  1. Hey, danke für den ausführlichen Artikel. Werde im kommenden Semester vermutlich eine Projektarbeit als Vorleistung zu meiner Bachelorarbeit über das Thema GCM schreiben, als kleine Referenz war der Artikel um einiges angenehmer als die Infos aus dem Developer-Tutorial von Google…

    So long!

  2. Hallo,

    ich habe mir das GCM Tut durchgelesen und wollte fragen ob es möglich wäre die beiden erstellten .php Dateien:
    send_multi_cast.php und
    register_for_multi_cast.php
    per Mail zu erhalten, damit man sich mal anschauen kann wie soetwas realisiert ist um dieses dann noch implementieren zu können?

    Vielen Dank im Voraus.

    MfG
    Pirmin Jenfer

    1. Hallo Pirmin,

      Durch ein kleines Missgeschick bin ich momentan und auch für die nächsten Wochen ein wenig eingeschränkt.
      Dieses Tutorial habe ich während der Arbeit für einen Kunden als Gedächtnisstütze geschrieben – entsprechend kann ich die Files nicht veröffentlichen. Ist aber nicht so schwer. Das register_script macht nichts anderes als die Id’s in eine DB zu schreiben und send_multicast.php schickt die Id’s in JSON per POST zu google – siehe developer.android.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.