2016-01-05 51 views
11

Sono riuscito a utilizzare GCM con dispositivi Android, ma ora sto cercando di implementarlo su un'app iOS.Google Cloud Messaging con Xcode 7 e iOS 9

Penso di aver seguito tutti i passaggi necessari per poter utilizzare il servizio GCM. Ho seguito lo https://developers.google.com/cloud-messaging/ios/client?configured=true per aggiungere il servizio a un'app esistente.

Penso che tutto sia configurato correttamente ma non sono in grado di ricevere alcuna notifica. Ho i certificati APN e il file GoogleService-info.plist, sulla console questo è l'output:

2016-01-05 13: 47: 53.864: GCM | Chiave non valida nel checkin plist: GMSInstanceIDDeviceDataVersion Connesso a GCM 2016-01-05 13: 47: 57.501: GGLInstanceID | Timestamp dell'ultimo check-in non valido in futuro. 2016/01/05 13: 47: 57,501 TerneraGallega [1014: 444977] arrivo successo con AUTHID: 4958686017822257121, Digest: KSJNg + Aj82uavBXrFeOAfA ==, lastCheckinTimestamp: 1.451.998,077 milioni Registrazione Token: NC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD già sottoscritto/argomenti/globali

Non appena ricevo questo se ho fatto una richiesta POST con:

{ "a": "NC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtp C8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD", "content_available": true, "notifica": { "corpo": "grande partita", "titolo!": "Portogallo vs Denmark" }}

il primo tentativo viene restituito un messaggio di successo, ma non registro né la notifica viene visualizzata nel dispositivo (con l'applicazione in primo piano)

Dopo pochi minuti, su un altro tentativo della richiesta POST ora restituisce un fallimento con

{ "multicast_id": 7256343774952522277, "successo": 0, "fallimento": 1, "canonical_ids": 0, "risultati": [ { "errore": "NotRegistered" } ] }

Ora, ho scaricato il GCM esempio dalla pagina di Google, configurato l'APN e anche ottenuto il GoogleService-info.plist, quando si lancia il file GCM Esempio Swift non appena si apre sulla dispositivo dice:

Registrazione riuscita! Controlla la console di debug di xcode per il token di registrazione che puoi usare ...

Dopo di ciò, se si imposta una richiesta POST con

{ "a": "mVEtHyTXEOg: APA91bGvK_Uf2ZKgpguWUOto3CXQzIT1z22uJ446mYkNqMwL9VLDYdGtdm_4vS8rcl3T9OeqEC1UWbdKAOyuoweW1GiU0mv0cDSPW03y4XGx19JcR6rxsiWRNUjtADX6iNAW8wM8UBJl", "content_available": true, "notifica": { "corpo ":" great match! ", " title ":" Portugal vs. Denmark " } }

si restituisce ancora una volta un

{ "multicast_id": 7435981433811133310, "successo": 0, "fallimento": 1, "canonical_ids": 0, "risultati": [ { "errore": "NotRegistered" } ] }

può qualcuno che ha implementato GCM su un app potrebbe puntare me quello che io mi mancano?

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

Infine ho fatto funzionare utilizzando un certificato di distribuzione invece di un certificato di sviluppo ... sembra che ho tutto bene configurato ma mi manca qualcosa con il certificato di sviluppo.

PS: Nella pagina del profilo APN sotto ID Ho attivato entrambi i certificati notifica push (è per questo che ho pensato che tutto era buono configurato)

Ma lascio aperta la questione perché sono in grado di utilizzare questo in fase di sviluppo

+0

È possibile controllare [documentazione] (https: //developers.google.c om/cloud-messaging/http # response) per le possibili cause dell'errore 'NotRegistered'. Dice: "Se è' NotRegistered', è necessario rimuovere l'ID di registrazione dal database del server perché l'applicazione è stata disinstallata dal dispositivo o l'app client non è configurata per ricevere messaggi. " – gerardnimo

+0

Ciao @gerardnimo, sì, quell'errore significa che devi rimuovere il token perché l'app non esiste più per quell'utente (che certo non è vero) ma non salvi ancora il token, voglio avere il sistema in esecuzione prima ..:( – neteot

risposta

1

Sono stato in grado di fare in modo efficace la stessa cosa della correzione nella tua modifica senza scherzare con i certificati. Ovviamente questo non funzionerà se hai già tutto configurato e stai usando sia gli ambienti di sviluppo che quelli di produzione, ma se sei solo in fase di sviluppo è abbastanza facile cambiare.

Nel progetto di esempio Gcm (per Objective-C) in applicazione: didRegisterForRemoteNotificationsWithDeviceToken ho semplicemente cambiato il codice da:

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

Per

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

ho capito questo non è esattamente un vero e proprio correzione, ma almeno ha funzionato senza modificare alcun certificato (purché sia ​​impostato il certificato di produzione.

+0

Ciao @jrobe sì, infatti in swift 2 se vuoi usare la proprietà del certificato di produzione con GCM devi impostare 'kGGLInstanceIDAPNSServerTypeSandboxOption = false' se non ottieni sempre il' {NotRegistered} 'ma quando io stava provando il certificato di sviluppo ho impostato il flag su true (ma ancora non ha funzionato) – neteot

Problemi correlati