7

Sto tentando di inviare notifiche push mobili a GCM tramite AWS SNS. Secondo l'ultimo GCM 3.0 documentation, uno può includere un carico utile di "notifica" o un carico utile "dati" (o entrambi). Se si invia un carico utile di notifica, GCM si prenderà cura di mostrare la notifica sul dispositivo dell'utente finale per conto dell'utente.Invio di un payload di sola notifica a GCM utilizzando AWS SNS

Utilizzando la console di SNS Amazzonia, ho provato l'invio di un carico utile solo per le notifiche, ma ho incontrato il seguente errore:

Invalid parameter: Message Reason: Invalid notification for protocol GCM: data key is expected in the json message (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter)

Mando:

{ 
    "GCM":"{\"notification\":{\"title\":\"Test Message\"}}" 
} 

ho il sospetto che questo potrebbe essere un problema con SNS è ancora conforme a una versione precedente di GCM e quindi si aspetta una chiave "dati", ma non ne sono sicuro. Qualcun altro ha un problema simile o ha qualche esperienza con questo? Grazie!

MODIFICA: Per chiarire, voglio inviare a GCM un carico utile di notifica e farlo visualizzare un avviso all'utente automaticamente come descritto nella documentazione. In questo momento, sto iniziando a chiedermi se SNS sta addirittura inoltrando il carico utile di notifica al dispositivo.

+0

Cosa succede se aggiungi la proprietà data e la lasci semplicemente con una stringa vuota? – cYrixmorten

+1

@cYrixmorten, buon punto. Certamente funzionerebbe, ma quello che voglio davvero succedere è che GCM riconosca il carico utile della notifica e mostri automaticamente l'avviso come documentato. Ciò non sta accadendo quando invio una stringa di dati vuota. – weiy

+0

Va bene, ho pensato che sarebbe stato abbastanza "intelligente" da riconoscere che il valore dei dati era vuoto. Ho solo esperienza con l'implementazione dell'installazione di GCM che gestisce me stesso (molto tempo fa e noioso) e quindi ho utilizzato parse.com. Quest'ultimo sta funzionando molto bene per me ed è facile da configurare. – cYrixmorten

risposta

10

Per rispondere alla mia domanda, ho ricevuto la seguente AWS supporto sul loro forum:

You are correct, SNS does not currently support GCM's "notification" payload type as described in their documentation. SNS supports the initial "data" payload type only but we are actively working on a solution to support the "notification" type. In the meantime, the "data" payload works the same except the client app is responsible for processing data messages as it has in the past.

Così fino a quando SNS supporta il carico utile di notifica GCM, si deve gestire la visualizzazione delle notifiche te estendendo la classe GcmListenerService e sovrascrive il metodo onMessageReceived.

AGGIORNAMENTO 10/2015: Sembra che SNS abbia ora implementato il supporto per il carico utile di notifica GCM. Se si includono entrambi i payload "dati" e "notifica", la "notifica" avrà la precedenza. Ho solo osservato questo comportamento su SNS, ma non ho trovato nessun blog/articolo AWS che lo annunci.

+0

Grazie weiy, ho trovato questo prezioso - guardando i dati che ricevo quando invio {"GCM": "{\" notification \ ": {\" title \ ": \" Title \ ", \" body \ ": \ "Corpo \"}, \ "dati \": {}} "}, vedo la chiave" gcm.notification.title "nel mio pacchetto di dati. Sto indovinando i prefissi SNS con "gcm", perché storicamente gli utenti SNS potrebbero utilizzare la chiave "notifica" per altri dati. Per il futuro indefinito, penso che dovrai decomprimere i dati da gcm.notification.X e non saremo in grado di utilizzare le specifiche di gcm 3.0. – Sean

+0

Grazie per questo. Dopo aver arato attraverso l'Interwebs per ore ho finalmente trovato questo e ha risolto il mio problema. Con l'uso di 'data' i miei titoli di notifica erano sempre' MESSAGGIO GCM'. La struttura 'notification' lo corregge! I documenti SNS non sembrano aggiornati per riflettere questo. – Luke