Ich habe dieses Tutorial https://developers.google.com/cloud-messaging/ios/client verfolgt, um GCM auf meiner iOS-Anwendung zu implementieren. Mein App-Server ist ein Google App-Modul, das in Java geschrieben ist, und ich verwende die Bibliothek gcm-server.jar https://github.com/google/gcm. Ich denke, dass meine Zertifikate in Ordnung sind und ich mich registrieren, ein Token erhalten und sogar den Inhalt der Nachrichten empfangen kann, die von meinem App-Server gesendet werden. Ich erhalte jedoch keine Benachrichtigungen, wenn die App im Hintergrund läuft. Ich erhalte sie immer nur, wenn ich auf das App-Symbol klicke, um sie neu zu starten.Google Cloud Messaging: Keine Warnungen erhalten, wenn iOS App im Hintergrund ist
Ich dachte, das war, weil ich nur didReceiveRemoteNotification:
und nicht didReceiveRemoteNotification:fetchCompletionHandler:
Umsetzung wurde so umgesetzt ich es statt der ersten, aber ich keine Benachrichtigungen erhalten, während im Hintergrund entweder und schlimmer noch, sandten die App abstürzt etwas sagen wie "Unbekannter Selektor DidReceiveRemoteNotification: "Wie etwas war falsch in der UserInfo. Ich habe Hintergrundmodi in xCode wie benötigt dafür erlaubt. Hier ist der Code, den ich verwende:
Kann jemand herausfinden, was ich nicht Benachrichtigungen erhalten, wenn nicht im Vordergrund?
EDIT: der Java-Code auf der Serverseite verwendet, um die GCM-Nachricht senden:
public static MulticastResult sendViaGCM(String tag, String message, List<String> deviceIdsList) throws IOException {
Sender sender = new Sender(Constantes.API_KEY);
// This message object is a Google Cloud Messaging object
Message msg = new Message.Builder().addData("tag",tag).addData("message", message).build();
MulticastResult result = sender.send(msg, deviceIdsList, 5);
return result;
}
EDIT2: Screenshots der POST Anfrage http://image.noelshack.com/fichiers/2015/34/1440193492-gcm1.png http://image.noelshack.com/fichiers/2015/34/1440193502-gcm2.png
EDIT3: Die Anfrage, die ich jetzt von meinem App-Server aus verschicke:
public static void sendGCMMessage(String tag, String message, List<String> deviceIdsList) {
String request = "https://gcm-http.googleapis.com/gcm/send";
try{
URL url = new URL(request);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
//conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
//Les deux headers obligatoires:
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "key=" + API_KEY);
//Construction du JSON:
JSONObject fullJSON = new JSONObject();
JSONObject data=new JSONObject();
JSONObject notification=new JSONObject();
data.put("tag", tag);
data.put("message", message);
notification.put("sound", "default");
notification.put("badge", "1");
notification.put("title", "default");
notification.put("body", message);
fullJSON.put("registration_ids", deviceIdsList);
fullJSON.put("notification", notification);
fullJSON.put("content_available", "true");
fullJSON.put("data", data);
//Phase finale:
OutputStreamWriter wr= new OutputStreamWriter(conn.getOutputStream());
wr.write(fullJSON.toString());
wr.flush();
wr.close();//pas obligatoire
//conn.setUseCaches(false);
}
catch(Exception e){
e.printStackTrace();
}
Gibt es einen anderen Weg, um fortzufahren? Da die von mir verwendete Java-Bibliothek (https://github.com/google/gcm) anscheinend nicht das Feld content_available oder die Benachrichtigungsnutzlast enthält. Ich werde meine Antwort bearbeiten, um ein Code-Snippet der Nachricht, die ich mit dieser Bibliothek sende, zu schreiben. – Gannicus
@Gannicus, siehe meine Antwort bearbeiten. – ztan
Danke für die Idee von Postman. Ich habe versucht, Ihre POST-Anfrage zu verwenden, aber es ist wirklich komisch: Wenn ich die Anfrage sende, bekomme ich einen "error: notRegistered" und die App kann keine Benachrichtigungen mehr empfangen (sogar die, die ich im Vordergrund erhalten habe). Ich muss ein neues GCM-Token generieren, damit es wieder funktioniert und sobald ich die POST-Anfrage benutze, passiert es erneut. Weißt du, warum? – Gannicus