2015-09-21 12 views
10

Ich habe also ein sehr merkwürdiges Problem mit Google Cloud Messaging bekommen. Das Problem, das ich habe, ist, dass es die Geräte erfolgreich registriert, und wenn eine Nachricht gesendet wird, erhalte ich eine Erfolgsmeldung von Google. Aber die Geräte erhalten niemals Nachrichten.Google Cloud Messaging zeigt Erfolgsmeldung, sendet aber kein iOS

Die Botschaft, die ich zurück von GCM erhalten ist:

"result": "Push notification sent successfully: {\"multicast_id\":6008387530769664000,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1442824842607522%73fc535e73fc535e\"}]}" 

Um die Sache noch verwirrender zu machen, meine Implementierung arbeitet vor ca. 2 Wochen und ich habe nichts zu Datum geändert. Die Android-Version der App empfängt Nachrichten ohne Probleme, nur die iOS-Implementierung funktioniert nicht.

Jede Hilfe wäre sehr willkommen!

Danke!

+1

Können Sie Ihren vollständigen HTTP-Request-Header und Body einfügen? Sie können auch versuchen, die [höhere Priorität] (https://developers.google.com/cloud-messaging/concept-options?hl=de#setting-the-priority-of-a-message) für Ihre Nachricht festzulegen, oder ändern Sie die [Lebensspanne] (https://developers.google.com/cloud-messaging/concept-options?hl=de#ttl) Ihrer Nachricht. – ztan

Antwort

12

Also habe ich dieses Problem endlich gelöst, nachdem ich mir die letzten Haare aus dem Kopf gezogen habe.

Es stellt sich heraus, dass die Geräte die Nachrichten empfangen, GCM jedoch die Priorität standardmäßig auf die niedrigste Priorität setzt. Dies bedeutet, dass das Gerät die Benachrichtigung erhält, sie jedoch nie anzeigt. Diese Priorität wird für stille Benachrichtigungen verwendet, um die App im Hintergrund zu aktivieren. Ich entdeckte das, weil ich den Empfang der Nachricht in der Konsole Wort gehalten:

Niedrige Priorität Push: [com.test.app] - Hintergrund nicht aktualisiert Unterstützte

Priorität ist ein Wert zwischen 1 und 10 Also habe ich dann die Priorität auf 10 gesetzt und die Nachricht sofort auf dem Gerät bekommen. Mein GCM-POST-Anfrage Körper sieht nun wie folgt aus:

{ 
    "to": "GCM token here", 
    "notification": { 
    "sound": "default", 
    "badge": "2", 
    "title": "default", 
    "body": "Test Push!", 
    }, 
    "priority" : 10, 
} 

Ich hoffe wirklich, dass diese anderen hilft, wie ich eine Woche ziehen meine Haare aus in Bezug auf diese verbracht haben.

(ノ ಠ 益 ಠ) ノ

EDIT:

Sie können einstellen, "Priorität" auf "hoch" und das funktioniert genau gleich als auf "10" (Priorität ein Wert zwischen 0 und 10. Google den Text an die Nummer für iOS

+1

Ich musste auch manuell ein Provisioning-Profil erstellen (anstatt die "automatische" Einstellung von Xcode zu verwenden), damit meine App GCM zum Laufen brachte. Ich hatte das gleiche Problem, das Sie gemeldet haben (GCM sagt, es war erfolgreich, aber das Gerät hat es nie erhalten), außer dass alle nachfolgenden Versuche, danach eine Push-Benachrichtigung zu senden, mit "NotRegistered" fehlschlagen würden.Ich denke, dass das Fehlen eines Bereitstellungsprofils irgendwie dazu führte, dass GCM dachte, das Registrierungs-Token sei nicht mehr gültig (nach dem ersten Versuch). Jedenfalls danke, dass du mir die meisten Haare auf meinem Kopf verschone! –

+0

Oh Mann, du bist toll :) – RezaRahmati

+0

du hast Recht. Du hast mich davor bewahrt, meine Haare zu ziehen ;-). aber ich fing an zu tun – Arash

1

Anstelle der Zugabe "Priorität" coverts: 10, sollten Sie die folgende Zeile hinzufügen: "content_available": true,

Im APNS-Server (iOS) ändert sich content_avaialble zu 1, wodurch die Push-Benachrichtigung im Hintergrund ausgeführt wird. Und Hinzufügen von "Priorität": 10, wird mehr iphone Batterie abtropfen lassen. In meinem Fall habe ich nicht einmal etwas mit Priorität, aber es funktioniert immer noch.

+0

Dies funktionierte für mich, nach Tagen der Frustration. Vielen Dank! – BThompson

Verwandte Themen