GCM implementieren

  • Antworten:67
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 282

05.07.2014, 13:55:38 via Website

Hallo!

Implementiere gerade GCM nach diesem Tutorial:
http://techlovejump.in/android-push-notification-using-google-cloud-messaging-gcm-php-google-play-service-library/

Welchen "Public API access" muss man generieren?
Bzw wo findet man die Projektnummer?

SENDER_ID is the project number, which you get from google code website.

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 14:07:59 via Website

Wenn du in der developer colsole angemeldet bist, dann auf dein projekt klickst, dann steht dort oben die ProjectID:

image

Zudem wählst du einen ServerKey aus, der wird dann von der konsole selber erstellt

— geändert am 05.07.2014, 14:08:21

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 14:12:48 via Website

Übrigends benötigt man die Project Number nicht die Project ID ;)

Da muss man eine IP-Adresse angeben .. ich habe aber eine dynamische! Funktioniert das auch mit DDNS?

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 14:21:40 via Website

Oh das meinte ich, tippfehler :)
DDns funzt glaube ich nicht, nimm zum testen erstmal 0.0.0.0/24. -> alles zulassen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 14:30:09 via Website

Funktioniert nicht ...

ERROR 401 - beim Message abschicken

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 14:44:37 via Website

Sorry muss so heissen:
0.0.0.0/0

Das Ding hat keine 24 Ports

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 14:51:34 via Website

Hat funktioniert :D freu mich

Ist jetzt aber nicht die schönste und sicherste variante oder?

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 14:55:51 via Website

Nein, eigentlich brauchst du einen web server, der immer die gleiche ip hat, dann ist der Zugriff nur für diese IP.
Sonst musst du halt immer wenn deine IP sich ändert dort dirn ändern.
Macht aber keinen Sinn.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 15:13:10 via Website

Das mit dem /24 macht man garnicht, wenn dan: 0.0.0.0/0, aber das ist unsicher, da jeder der die ProjectNumber und die GCM id des Android Gerätes kennt, kann dann messages Versenen.
Per ip muss die Anfrage halt von der angegebenen IP kommen.
Das ergibt schon mehr sicherheit.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 15:45:34 via Website

Irgendwie bekomm ich dass nicht zum laufen mit dem BrowserKey ...

LG Jakob

Antworten
  • Forum-Beiträge: 282

05.07.2014, 17:51:15 via Website

Weiß jemand wie man das mit einem BrowserKey hinbekommt? - Wär echt toll!!

Und noch etwas anderes ... wie kann man dann am besten in der App unterscheiden welchen "Typ" die Pushbenachrichtigung hat? kann man da ein eigene Felder mitschicken? zum Beispiel eine Spalte Typ wo dann der Wert 'Version' ist, wenn die Benachrichtigung dann anzeigen soll, dass eine neue Version verfügbar ist...

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 17:52:01 via App

Dann lass den Serverkey und mache deine Gcm message in einem Bestimten textformat damit deine App auch weiss dass dei gcm message auch von dir kommt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 18:02:27 via Website

Das mit dem Typ habe ich auch in meiner GCM implementation.
Ich mache dies über en GCM Message Format:

[MessageType]Message[optional Parameters]

Übergebe ich die Empfangene GCM Nachricht an einen GCM Message Parser, dieser Teilt mir die Message in den Typ (geht mit einer Enumeration), Nachricht und andere Parameter ein.
Nach dem parsen kannst du dann entsprechend auf den Typ reagieren.
PS: Wenn deine App im PlaySore ist, brauchst du keine GCM mit einer neuen Version

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 18:03:20 via Website

Findest du es besser wenn man der Pushnachricht zB nur eine Zahl mitschickt und in der App fixkodiert, was dann passieren soll wenn die Pushnachricht diese bestimmte Zahl hat?

LG Jakob

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 18:06:50 via Website

Wahrscheinlich hast du meinen neueren Post noch nicht gelesen, aber so wie ich es oben geschrieben Habe ist es verständlich, nur der Parser muss halt entsprechend Programmiert sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 18:17:57 via Website

Habe ich das richtig verstanden dass du im PHP-File, die Message so zB festlegst:

$message = array("typ" => $typ, "message" => $message, ...);

Und dann in der GcmIntentService.java (die Klasse vom Tutorial) in der onHandleIntent(Intent intent)-Methode die Nachricht parst? Oder hast du dass wirklich fixkodiert? Verstehe ich noch nicht ganz

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 18:31:16 via Website

Also nehmen wir mal an du hast das Feld Version..
Dan muss du nach meinem Schema eine Message schreiben die So aussieht:

[Version]Es ist eine neue Version (1.2.3) Verfügbar![Intent:de.deinPackage.deineUpdateActivity]

So jetzt haben wir eine Nachricht die den Typ Version hat.
Dann noch eine GCM Message (Text) die dem User z.b. als Notification angezeigt wir.
Als optionalen Parameter haben wir eine Klassenbezeichnug zu deiner Update Activity, die die Neue Apk aus dem Internet herunterläd.
Wenn du daraus eine Norifcation machst, dann soll beim klick darauf die Update Activiy aufgerufen werden.
Ich mache das Intent mit in die Message rein, damit ich Flexibel bin, so kann ich auch ohne den Source Code der App zu ändern eine Andere Activity über GCM und über die Notification aufrufen lassen.

So jetzt kommt die GCM Message in einem Broadcasr Reciver in deiner app an.
Jetzt musst du diese Auswerten, dafür kannst du dir eine Parser Klasse scheiben, die die die Zusammenhängende GCM Nachricht in ihre Bestandteile zerlegt (Typ,intentname oder Usernachricht)

Jetzt muss du nurnoch die Message nach den Typen Filtern, z.b wenn es eine Message vom Typ Version ist, dann erstelle eine Notification damit der user informiert ist.
So kannst du unbegrenzt viele Typen definieren und in der App dann entsprechend reagieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

05.07.2014, 18:36:27 via Website

Das bedeutet aber, dass du deine Message nicht im JSON Format mitschickst oder?

Und du hast ja vorher geschrieben

mache deine Gcm message in einem Bestimten textformat damit deine App auch weiss dass dei gcm message auch von dir kommt.

wir würdest du dass dann genau machen? meinst du damit, dass ich eben auch so ein

[MessageType]Message[optional Parameters]

bestimmtes Message Format machen soll?

LG

LG Jakob

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

05.07.2014, 18:41:47 via Website

Ja wieso nicht?
Was spricht dagegen?
Json könntest du auch benutzen, ich hatte keine List mich mit einem Json Parser auseinanderzusetzen, deswegen habe ich es so gelöst,
heißt aber nicht dass es nicht anders geht, bzw. dass du meine Methode übernehmen musst

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel