2016-01-05 10 views
11

Ich habe es geschafft, GCM mit Android-Geräten zu verwenden, aber jetzt versuche ich auf einer iOS-App zu implementieren.Google Cloud Messaging mit Xcode 7 und iOS 9

Ich glaube, ich habe alle notwendigen Schritte befolgt, um den GCM-Dienst nutzen zu können. Ich habe die https://developers.google.com/cloud-messaging/ios/client?configured=true verfolgt, um den Dienst zu einer bestehenden App hinzuzufügen.

Ich denke, dass alles korrekt konfiguriert ist, aber ich kann keine Benachrichtigung erhalten. Ich habe die APN-Zertifikate und die GoogleService-info.plist-Datei, auf der Konsole ist dies die Ausgabe:

2016-01-05 13: 47: 53.864: GCM | Invalid key im Checkin plist: GMSInstanceIDDeviceDataVersion Verbunden mit GCM 2016-01-05 13: 47: 57.501: GGLInstanceID | Ungültiger letzter Checkin-Zeitstempel in Zukunft 2016.01.05 13: 47: 57,501 TerneraGallega [1014: 444.977] Checkin erfolgreich AUTHID: 4958686017822257121, verdauen: KSJNg + Aj82uavBXrFeOAfA ==, lastCheckinTimestamp: 1451998077000 Registrierung Token: nC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD Bereits abonniert/Themen/global

Sobald ich diese erhalten, wenn ich eine POST-Anfrage mit gemacht:

{ "auf": „nC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtp C8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD“, "content_available": true, "Benachrichtigung": { "body": "großartiges Spiel", "title": "Portugal gegen Dänemark" } }

der erste Versuch, es eine Erfolgsmeldung zurückgibt, aber keine Protokoll noch Benachrichtigung wird in das Gerät (mit der Anwendung auf dem Vordergrund) gezeigt

Nach ein paar Minuten, auf einem anderen Versuch der POST-Anfrage jetzt gibt es einen Fehler mit

{ "multicast_id": 7256343774952522277, "Erfolg": 0, "Fehler": 1, "canonical_ids": 0, "Ergebnisse": [ { "Fehler": "NotRegistered" } ] }

Nun habe ich heruntergeladen GCM Beispiel aus der Google-Seite, den APN konfigurierte und bekam auch den GoogleService-info.plist, beim Start des GCM Beispiel Swift sobalde Datei, wie es auf dem öffnet Gerät sagt es:

Registrierung Erfolgreich! Überprüfen Sie die xcode-Debug-Konsole für das Registrierungs-Token, das Sie verwenden können ...

Danach, wenn Sie eine POST-Anfrage mit

{ "auf": "mVEtHyTXEOg: APA91bGvK_Uf2ZKgpguWUOto3CXQzIT1z22uJ446mYkNqMwL9VLDYdGtdm_4vS8rcl3T9OeqEC1UWbdKAOyuoweW1GiU0mv0cDSPW03y4XGx19JcR6rxsiWRNUjtADX6iNAW8wM8UBJl", "content_available": true, "Benachrichtigung": { „body ":" Tolles Spiel! ", " Titel ":" Portugal vs. Dänemark " } }

es kehrt wieder ein

{ "multicast_id": 7435981433811133310, "Erfolg": 0, "Fehler": 1, "canonical_ids": 0, "Ergebnisse": [ { "Fehler": "NotRegistered" } ] }

Kann jemand, der GCM auf einer App implementiert hat, könnte mir zeigen, was ich fehlt?

------- ------- EDIT

Endlich habe ich es anstelle eines Entwicklungszertifikat unter Verwendung eines Verteilungsbescheinigung arbeiten ... es scheint, dass ich alles gut konfiguriert aber mir fehlt etwas mit dem Entwicklungszertifikat.

PS: In der APN Profilseite unter ID habe ich beide Push-Benachrichtigungen Zertifikate aktiviert ist (das ist, warum ich dachte, dass alles so konfiguriert war gut)

Aber ich werde diese Frage offen lassen, weil ich nicht in der Lage bin zu verwenden dies unter Entwicklungsbedingungen

+0

Sie können [Dokumentation] (https: //developers.google.c om/cloud-messaging/http # response) für die möglichen Ursachen des 'NotRegistered' Fehlers. Darin heißt es: "Wenn es nicht registriert ist, sollten Sie die Registrierungs-ID aus Ihrer Server-Datenbank entfernen, da die Anwendung vom Gerät deinstalliert wurde oder die Client-App nicht für den Empfang von Nachrichten konfiguriert ist." – gerardnimo

+0

Hi @gerardnimo, ja, dieser Fehler bedeutet, dass Sie das Token entfernen müssen, weil die App für diesen Benutzer nicht mehr existiert (das stimmt nicht), aber ich speichere das Token noch nicht, ich möchte, dass das System zuerst läuft ..:( – neteot

Antwort

1

Ich war in der Lage, die gleiche Sache wie die Lösung in Ihrer Bearbeitung, ohne mit den Zertifikaten Unordnung zu tun. Natürlich funktioniert das nicht, wenn Sie bereits alles eingerichtet haben und sowohl die Entwicklungs- als auch die Produktionsumgebung verwenden. Wenn Sie sich jedoch gerade in der Entwicklungsphase befinden, ist es einfach, dies zu ändern.

Im Gcm Beispielprojekt (für Objective-C) in der Anwendung: didRegisterForRemoteNotificationsWithDeviceToken änderte ich einfach den Code aus:

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

Um

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

Ich verstehe das nicht genau das ist eine echte behoben, aber es hat zumindest funktioniert, ohne dass Zertifikate geändert wurden (solange das Produktionszertifikat eingerichtet ist.

+0

Hi @jrobe ja, in der Tat in Swift 2, wenn Sie Eigentum Produktionszertifikat mit GCM verwenden möchten, müssen Sie die 'kGGLInstanceIDAPNSServerTypeSandboxOption = false ', wenn Sie nicht immer die' {NotRegistered} 'aber wenn ich Ich habe das Entwicklungszertifikat ausprobiert. Ich habe die Flagge auf "true" gesetzt (funktioniert aber immer noch nicht). – neteot

Verwandte Themen