2013-07-20 6 views
14

Ich arbeite mit dem "neuen" GCM, einem Teil von Google Play Services, der keine Jars für Android und Server verwendet. Android verwendet Google Play apk zum Registrieren, Empfangen und sogar zum Senden von Nachrichten. Auf der Serverseite müssen wir mit GCM nur kommunizieren, wenn wir einen POST für ihren Server durchführen (wenn nicht XMPP verwendet wird). Ich habe alles eingestellt: Meine Android-App registriert und wartet auf Nachrichten von GCM. Mein Server kann mit GCM kommunizieren und ich kann Nachrichten an meine Android-App senden.(Neu) GCM-Nachricht erhalten, aber wie zu parsen?

Das Problem: Ich verwende eine gemeinsame jar (Android und Server) mit POJO-Objekte, die ich in und von JSON transformieren. Da POST zu GCM von meinem Server JSON verwendet und Nachrichten in meinem Android-Gerät auch empfangen (zumindest glaube ich es), dachte ich, es würde mir das Leben leichter machen. Aber wenn ich eine Nachricht von GCM in Android erhalte, weiß ich nicht, wie ich die Nutzdaten der Nachricht bekomme und in meine Objekte transformiere. Ich kann die Informationen dort sehen, aber es ist nicht mein Objekt (es gibt einige Informationen, die GCM hineinschieben).

Meine Frage ist: Gibt es eine Möglichkeit, in Android-Ende Nutzinformationen wie ich an GCM-Server gesendet habe? Oder soll ich empfangene Daten in Android ohne JSON analysieren?

Nachricht Ich habe

{ "registration_ids" ("data" Nutzlast): [ "APA91bFdV ..."], "collapse_key": null, "delay_while_idle": false, "time_to_live ": 2419200," data ": {" type ": 10" targetVersion ": - 1," message ":" test msg“, "url": "test url"}}

Was ich bekam in Android intent.getExtras(). toString()

Bundle [{message = Test msg, collapse_key = do_not_collapse, targetVersion = -1, aus = 483833987130, Typ = 10, url = Test url}]

würde ich Ihre Hilfe zu schätzen wissen. Vielen Dank!

Antwort

25

Gibt es eine Möglichkeit, in Android-Ende Nutzinformationen wie auf dem GCM-Server zu erhalten?

Anstatt "JSON" zu denken, denke an "Schlüssel/Wert-Paare". Ihr Server sendet Daten in Schlüssel/Wert-Paaren. Ihre App empfängt diese Daten als Schlüssel/Wert-Paare in den Extras in der Intent. Sie wissen, was Ihre Schlüssel sind, also rufen Sie einfach die Werte aus den Extras ab, die mit diesen Schlüsseln verknüpft sind (z. B. getStringExtra("message"), getStringExtra("url")).

Oder sollte ich empfangene Daten in Android ohne JSON analysieren?

Die empfangenen Daten sind nicht in JSON enthalten.

+0

Wie definiert man die Modellklasse für Apple und Android in Java? –

10

Sie müssen eine weitere Ebene zu Json Daten hinzufügen, offenbar JSON nicht rekursiv parsen. Senden:

{...., "data":{"payload":{"id":5,"a":5}}} 

dann in Code:

String json = intent.getExtras().getString("payload"); 
// json = {"id":5,"a":5} 

Diese leicht zu POJO umgewandelt werden kann, ist für mich dieser Ansatz ist besser, wenn Sie Klassen haben bereits (oder wollen einfach nur mit Objekten arbeiten, anstatt erhalten ... („xyz“)

+0

Vielen Dank für diese kleine Arbeit. Google gibt uns 4kb für eine Payload, also möchte ich das anstelle eines "Tickle" verwenden, das einen anderen API-Aufruf für mein Backend verwenden würde. Prost! – ajwest

1

Dies ist, was ich die Daten zu bekommen ... ich denke, das Ihnen .. hilft

Dies ist die Antwort, die ich von UrbanAirship bekommen bin Push-Benachrichtigung.

Bundle [{com.urbanairship.push.ALERT = inhalt vorhanden = 1, newscategorycode = O21R97, Priorität = 5, com.urbanairship.push.PUSH_ID = afc9e690-f308-11e4-af8c-001018957618, id = 6534.0, von = 966150816212, func = Nachrichten, Nachrichtenkategorie = HR, com.urbanairship.push.APID = 28e48c60-324b-456c-95b5-8fde9ab1a956, collapse_key = do_not_collapse, com.urbanairship.push.CANONICAL_PUSH_ID = 7641453d-9207-4213- 81c0-404387583de7}]

Lösung:

Bundle bundle = message.getPushBundle(); 

in Ihrem Fall erhält das Bündel Objekt dann wie folgt verwenden ...

String func = bundle.getString("func"); 
    String newscategory = bundle.getString("newscategory"); 
    String sinceId = bundle.getString("id"); 

Sie werden die Daten ..

Glücklich Codierung erhalten!