2015-09-21 19 views
10

Quindi ho riscontrato un problema molto strano con Google Cloud Messaging. Il problema che sto avendo è che sta registrando i dispositivi con successo, e quando viene inviato un messaggio ottengo un messaggio di successo da Google. Ma i dispositivi non ricevono mai messaggi.Google Cloud Messaging che mostra il messaggio di successo ma non invia iOS

Il messaggio torno da GCM è:

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

per rendere le cose ancora più confuse, mia implementazione stava lavorando circa 2 settimane fa e non ho cambiato nulla fino ad oggi. La versione Android dell'app sta ricevendo messaggi senza problemi, è solo l'implementazione iOS che non funziona.

Qualsiasi aiuto sarebbe molto apprezzato!

Grazie!

+1

È possibile incollare l'intestazione e il corpo della richiesta HTTP completa? Puoi anche provare a impostare la [priorità più alta] (https://developers.google.com/cloud-messaging/concept-options?hl=it#setting-the-priority-of-a-message) per il tuo messaggio, oppure modificare [durata della vita] (https://developers.google.com/cloud-messaging/concept-options?hl=it#ttl) del messaggio. – ztan

risposta

12

Così ho finalmente risolto questo problema dopo aver tolto dalla mia testa gli ultimi peli rimasti.

Si scopre che i dispositivi ricevono i messaggi ma GCM imposta la priorità sulla priorità più bassa per impostazione predefinita. Ciò significa che il dispositivo riceve la notifica ma non la visualizza mai. Questa priorità viene utilizzata per le notifiche silenziose per riattivare l'app in background. Ho scoperto questo perché ho continuato a ricevere il messaggio nel detto console:

bassa spinta Priorità: [com.test.app] - aggiornamento in background non supportato

La priorità è un valore compreso tra 1 e 10 quindi ho impostato la priorità su 10 e ho ricevuto il messaggio immediatamente sul dispositivo. Il mio GCM POST richiesta corpo appare come segue:

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

Spero davvero che questo aiuta gli altri come io ho trascorso una settimana tirando fuori i miei capelli per quanto riguarda questo.

(ノ ಠ 益 ಠ) ノ

EDIT:

È possibile impostare "priorità" a "alto" e che funziona esattamente come l'impostazione su "10" (priorità è una valore compreso tra 0 e 10. Google ripari il testo al numero per iOS

+1

Inoltre, dovevo creare manualmente un profilo di provisioning (anziché utilizzare l'impostazione "Automatico" di Xcode) per consentire all'applicazione di GCM di funzionare. Stavo riscontrando lo stesso problema che hai segnalato (GCM afferma che ha avuto successo, ma il dispositivo non lo ha mai ricevuto), ad eccezione di tutti i tentativi successivi di inviare una notifica push in seguito a un errore con "NotRegistered".Penso che non avere un profilo di provisioning in qualche modo abbia portato GCM a pensare che il token di registrazione non fosse più valido (dopo il primo tentativo). Comunque grazie per avermi risparmiato la maggior parte dei peli sulla testa! –

+0

Oh uomo sei fantastico :) – RezaRahmati

+0

hai ragione. mi hai salvato dal tirarmi i capelli ;-). comunque stavo cominciando a farlo – Arash

1

Invece di aggiungere "priorità": 10, Si dovrebbe aggiungere la seguente riga: "content_available": true,

Nel server APNS (iOS), content_avaialble diventa 1 che porta la notifica push in background. E aggiungendo "priorità": 10, scaricherà più batteria iphone. Nel mio caso non ho nemmeno nulla legato alla priorità, ma funziona ancora.

+0

Questo ha funzionato per me, dopo giorni di frustrazione. Grazie! – BThompson

Problemi correlati