48

Sto utilizzando le risorse AWS per il mio progetto Android, sto pianificando di aggiungere un servizio di notifica push per il mio progetto con AWS SNS. Ci sono poche domande che mi infastidiscono molto. Non ho trovato nessuna domanda riguardo a questi, tranne uno o due, ma con spiegazioni poco chiare.FCM con AWS SNS

1.Does AWS supporto FCM? SNS funziona con GCM. Ma Google consiglia di utilizzare FCM anziché GCM. Non ho trovato AWS supportando FCM.

2.Do AWS memorizzare i messaggi (o dati) nelle loro banche dati anche dopo l'invio di notifiche push?

3.I provato a mettere chiave API FCM nella piattaforma applicativa SNS, sta mostrando parametri non validi perché?

+0

SNS non supporta ancora FCM, utilizza un deprecato versione di GCM. Da dove prendi la chiave API? –

+1

quello che ho provato è stato, ho cercato di mettere chiave API di FCM in SNS e non ha funzionato, dopo aver letto il documento in AWS (SNS) hanno accennato a mettere chiave del server. L'ho provato ha funzionato bene. Sono in grado di inviare notifiche push tramite SNS per FCM. Non so esattamente il motivo per cui ha funzionato. Sei sicuro che SNS attualmente non supporti FCM? – Naroju

+0

È corretto che la chiave del server è necessaria per inviare messaggi GCM (ora FCM). Sul lato client (dispositivo mobile) GCM e FCM sono generalmente gli stessi, quindi entrambi riceveranno messaggi in modo atteso. Tuttavia ci sono alcune funzionalità FCM che non funzionano, ad esempio: topic messaging. –

risposta

102

FCM è retrocompatibile con GCM. I passaggi per la configurazione di FCM su AWS sono identici a GCM set up procedure e (almeno per il momento) FCM funziona in modo trasparente con GCM e SNS rispetto alla configurazione lato server.

Tuttavia, se si sta inviando data carichi al dispositivo Android non saranno trattati a meno che non si implementa una client side service che si estende FirebaseMessagingService. Il generatore di messaggi JSON predefinito nella console AWS invia i messaggi data, che verranno ignorati dall'app a meno che il servizio sopra menzionato non sia implementato. Per aggirare il problema per i test iniziali è possibile fornire un notification payload personalizzato che sarà ricevuta dal vostro dispositivo (fino a quando l'applicazione non è in primo piano)

Ci sono GCM-FCM migration instructions fornite da Google tuttavia le modifiche è necessario apportare sono prevalentemente sul lato App.

I passaggi da seguire per testare GCM/FCM sulla vostra app con SNS sono:

  1. Creare un Platform Application in SNS, selezionando Google Cloud Messaging (GCM) come push piattaforma di notifica, e fornendo il vostro Server API key nel campo Chiave API.
  2. selezionare l'applicazione della piattaforma e fare clic sul pulsante Crea piattaforma endpoint.
  3. Fornire l'InstanceID (dispositivo Token) generato dalla vostra applicazione. È necessario estendere il numero FirebaseInstanceIDService e sostituire il metodo onTokenRefresh per vederlo all'interno dell'app Android. Dopo aver installato have done this, disinstallare e reinstallare l'app e il token deve essere stampato sulla console di debug in Android Studio al primo avvio.
  4. Fare clic sul pulsante Aggiungi endpoint.
  5. Fare clic sul collegamento ARN per la propria applicazione di piattaforma.
  6. selezionare il punto finale appena creato per il dispositivo e fare clic sul Pubblica all'endpoint pulsante.
  7. Selezionare il formato messaggio JSON e fare clic sul pulsante JSON generatore di messaggi.
  8. inserire un messaggio di prova e fare clic sul Genera JSON pulsante
  9. Ora arriva la "parte Gotcha".

Il messaggio che viene generato dal SNS saranno di forma:

{ 
"GCM": "{ \"data\": { \"message\": \"test message\" } }" 
} 

Come abbiamo accennato in precedenza, data carichi verranno ignorati se nessun servizio a riceverne è stato implementato. Vorremmo testare senza scrivere troppo codice, quindi dovremmo inviare un payload notification. Per fare questo, è sufficiente modificare il messaggio JSON per leggere:

{ 
"GCM": "{ \"notification\": { \"text\": \"test message\" } }" 
} 

Una volta che avete fatto questo, assicurarsi che la vostra applicazione non è in esecuzione sul dispositivo, e premere il Pubblica messaggio pulsante. Ora dovresti visualizzare una notifica sul tuo dispositivo.

Ovviamente è possibile eseguire tutto questo in modo programmatico tramite l'API Amazon SNS, tuttavia tutti gli esempi sembrano utilizzare il payload data, quindi è necessario tenerlo a mente e generare un payload appropriato per il proprio caso d'uso.

+1

Risposta brillante, grazie. Vale la pena notare che il JSON ha una certa profondità per quanto riguarda le opzioni di configurazione - vedere https://developers.google.com/cloud-messaging/concept-options - anche se non ho ancora testato qualsiasi funzionalità specifiche per FCM. – Tom

+0

I messaggi 'data' funzionano correttamente con sns anche se l'applicazione client non implementa FCM ma GCM. Nella mia app non sono stato aggiornato a FCM in client ma FCM che utilizza SNS funziona bene anche per i messaggi 'data'. Non dovrebbe funzionare? –

+1

SNS utilizza GCM quindi se si utilizza il client GCM dovrebbe comportarsi come normale (fino al punto che Google decide di ritirarsi GCM). Questa domanda è più a che fare con il supporto di FCM su AWS (che è sostenuto tramite la compatibilità all'indietro sul lato API di Google) –

2

Solo una nota complementare alla risposta di Nathan Dunn: per aggiungere l'uso del suono il seguente messaggio JSON

{ 
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }" 
} 
6

Ora si può andare alla console Firebase (https://console.firebase.google.com/) selezionare il progetto, fare clic sull'icona dell'ingranaggio e scegliere progetto impostazioni, quindi fare clic sulla scheda di messaggistica cloud ...

vedrete la chiave legacy Server che è la chiave GCM API e avrete la possibilità di generare nuove chiavi di server che sono le versioni FCM

SNS w accettare malato entrambe le versioni, ma la loro opzione di menu è ancora categorizzare sotto GCM

Ecco la foto per il vostro riferimento:

enter image description here

noti che è possibile "accidentalmente" rimuovere il server chiavi ma la chiave del server Legacy non è cancellabile Inoltre, se si fa clic sul pulsante Aggiungi server, verrà visualizzata una nuova chiave del server SOTTO il primo, SENZA AVVERTENZA! ... Bel lavoro Google;)

4

Ho provato a utilizzare la soluzione con payload di notifica anziché dati, ma non ho ricevuto notifiche push sul dispositivo mobile. Ho trovato questo tutorial https://youtu.be/iBTFLu30dSg con i sottotitoli in inglese su come utilizzare FCM con AWS SNS passo dopo passo e un esempio di come inviare notifiche push dalla console AWS e implementarlo su php con aws php sdk. Mi ha aiutato molto.

0

Un'altra nota aggiuntiva alla grande risposta di Nathan Dunn. Come inviare i dati con la notifica da SNS a Firebase.

abbiamo bisogno di aggiungere dati al JSON (all'interno della notifica):

{ 
    "default": “any value", 
    "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }” 
} 

Nell'implementazione FirebaseMessagingService (Xamarin esempio)

public override void OnMessageReceived(RemoteMessage message) 
{ 

    try 
    { 

     var body = message?.GetNotification()?.Body; 
     var title = message?.GetNotification()?.Title; 
     var tag = message?.GetNotification()?.Tag; 
     var sound = message?.GetNotification()?.Sound; 

     var data = message?.Data 
     foreach (string key in data.Keys) 
     { 
      // get your data values here 
     } 

    } 
    catch (Exception e) 
    { 
    } 
}