2016-04-21 7 views
0

Ich habe Schwierigkeiten, Benachrichtigungen an Android-Geräte zu pushen.Android Benachrichtigung push leer mit GCM und Java mit JSON-Nachricht

Hier ist ein kleines Stück Code, den ich schrieb:

String API_KEY = "AIzaSy...."; 
    String url = "https://android.googleapis.com/gcm/send"; 
    String to = "ce0kUrW..."; 

    String data = "{\"to\": \"" + to + "\"}"; 

    RequestBody body = RequestBody.create(MediaType.parse("application/json"), data); 

    OkHttpClient client = new OkHttpClient(); 
    Request request = new Request.Builder().url(url).post(body).addHeader("Authorization", "key=" + API_KEY).build(); 

    Response response = client.newCall(request).execute(); 
    System.out.println(response.headers()); 
    System.out.println(response.body().string()); 

bei https://developers.google.com/cloud-messaging/http#send-to-sync Sehen, es funktioniert gut, wenn ich die Send-to-Sync-Option versuchen. Ich erhalte einen Benachrichtigungston auf meinem Telefon, aber es gibt keine tatsächliche Benachrichtigung, da keine Nachricht oder Daten mit dem Push verbunden sind.

Nun, wenn ich meine Daten String mit der folgenden Zeile ersetzen, erhalte ich immer noch das gleiche Ergebnis:

String data = "{ \"notification\": {\"title\": \"Test title\", \"text\": \"Hi, this is a test\"},\"to\" : \"" 
    + to + "\"}"; 

Ich bin nicht sicher, was ich bin fehlt. Meine Vermutung ist, dass mein Format der Benachrichtigung falsch ist, aber ich habe jede Kombination ausprobiert, die ich bisher bei meinen Nachforschungen gefunden habe.

Sie in das Protokoll schreibt wie folgt aussieht:

Content-Type: application/json; charset = UTF-8

Datum: Do, 21. April 2016 10.51.23 GMT

Gültig bis: Do, 21. April 2016 10.51.23 GMT

Cache-Control: privat, max -age = 0

X-Content-Type-Optionen: NOSNIFF

X-Frame-Options: SAMEORIGIN

X-XSS-Schutz: 1; mode = Block

Server: GSE

Alternate-Protokoll: 443: quic

Alt-Svc: quic = ": 443"; ma = 2592000; v = "32,31,30,29,28,27,26,25"

Transfer-Encoding: Chunked

OkHttp-Selected-Protokoll: HTTP/1.1

OkHttp-Sent-Millis : 1461235877551

OkHttp-Received-Millis: 1461235877855

{ "multicast_id": 6596853786874127657, "Erfolg": 1, "Fehler": 0, "canonical_ids": 0, "Ergebnisse": [{ "message_id ":" 0: 1461235883968556% 6ff215a7f9fd7ecd "}]}

Antwort

1

Der Protokolleintrag zeigt an, dass Ihre Nachricht erfolgreich verarbeitet wurde. Jedoch für die Meldung mit Nutzlast Option sollten Sie eine JSON Meldung wie diese an:

{ 
    "to" : "<your-recipient-id>", 
    "notification" : { 
     "body" : "Hi, this is a test", 
     "title" : "My test" 
    } 
    } 

Bitte ändern Sie wie vorgeschlagen und lassen Sie uns wissen, ob das hilft. Sie können die Messaging Concepts and Options in Entwicklerhandbüchern überprüfen - das Handbuch enthält einige nützliche Beispiele.

Vielleicht als Beispiel - so können Sie mit den Benachrichtigungen umgehen. In Ihrer App onMessageReceived() verarbeiten Sie es, indem Sie die Notification-Payload unter Verwendung von notification als Schlüssel abrufen. Zum Beispiel:

public void onMessageReceived(String from, Bundle data) { 
    String notificationJSONString = data.getString("notification"); 
    //then you can parse the notificationJSONString into a JSON object 
    JSONObject notificationJSON = new JSONObject(notificationJSONString); 
    String body = notificationJSON.getString("body"); 
    Log.d(TAG, "Notification Message is : " + body); 
    } 
+0

Die Verwendung von "Körper" macht das gleiche. Ich habe auch die Beispiele auf dieser Seite ausprobiert (früher während meiner Recherchen) und ich bekomme keine Freude. – Frost

+0

Siehe aktualisierte Antwort - Lassen Sie uns zuerst bestätigen, ob Sie die Nachricht/Benachrichtigung in der 'onMessageReceived' Funktion erhalten. – ishmaelMakitla

+0

Sie haben vielleicht gerade eine ganze andere Dose Würmer für mich geöffnet. Mein Beispiel ist also die Serverseite, auf der die Nachricht erstellt und gesendet wird. Verstehe ich richtig, dass es dann eine Client-Seite gibt (wo GcmListenerService mit einer Methode "onMessageReceived" sitzt? Und hier wird die Nachricht behandelt und an das Telefon weitergeleitet? Ich glaube nicht, dass ich Zugang zur Client-Seite habe. – Frost

Verwandte Themen