FCM con AWS SNS


94

Sto usando le AWSrisorse per il mio progetto Android, ho intenzione di aggiungere il servizio di notifica push per il mio progetto con AWS SNS. Ci sono alcune domande che mi preoccupano molto. Non ho trovato alcuna domanda al riguardo, tranne una o due ma con spiegazioni poco chiare.

1. AWSsupporta FCM? SNSlavorare con GCM. Ma Google consiglia di utilizzare FCM invece di GCM. Non ho trovato AWSsupporto FCM.

2. AWSMemorizza messaggi (o dati) nei loro database anche dopo aver inviato notifiche push?

3.Ho provato a inserire la chiave API FCM nella piattaforma applicativa SNS, mostra parametri non validi perché?


SNS non supporta ancora FCM, utilizza una versione deprecata di GCM. Da dove prendi la chiave API?
Arthur Thompson

1
Quello che ho provato è stato, ho provato a mettere la chiave API di FCM in SNS e non ha funzionato, dopo aver letto il documento in AWS (SNS) hanno menzionato di mettere la chiave del server. 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 non supporti FCM attualmente?
Naroju

È corretto che la chiave del server sia richiesta per inviare messaggi GCM (ora FCM). Sul lato client (dispositivo mobile) GCM e FCM sono generalmente uguali, quindi entrambi riceveranno i messaggi nel modo previsto. Tuttavia, ci sono alcune funzionalità di FCM che non funzionano, ad esempio: messaggi di argomenti.
Arthur Thompson

è possibile utilizzare argomenti sns con fmc? grazie per una risposta così fantastica
Juan Jose Tugores

qual è il vantaggio di utilizzare SNS in primo luogo? FCM non dovrebbe essere sufficiente?
Khaled Osman

Risposte:


188

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

Tuttavia , se invii datapayload al dispositivo Android, non verranno elaborati a meno che non implementi un servizio lato client che si estende FirebaseMessagingService. Il generatore di messaggi JSON predefinito nella console AWS invia datamessaggi, che verranno ignorati dalla tua app a meno che non venga implementato il servizio di cui sopra. Per aggirare questo problema per i test iniziali, puoi fornire un notificationpayload personalizzato che verrà ricevuto dal tuo dispositivo (purché la tua app non sia in primo piano)

Ci sono istruzioni per la migrazione GCM-FCM fornite da Google, tuttavia le modifiche che devi apportare sono prevalentemente sul lato dell'app.

I passaggi che devi seguire per testare GCM / FCM sulla tua app con SNS sono:

  1. Crea un'applicazione della piattaforma in SNS , selezionando Google Cloud Messaging (GCM) come piattaforma di notifica push e fornendo la tua chiave API del server nel campo della chiave API .
  2. Selezionare l'applicazione della piattaforma e fare clic sul pulsante Crea endpoint piattaforma .
  3. Fornisci l'ID istanza ( token del dispositivo ) generato dalla tua app. È necessario estendere FirebaseInstanceIDServicee sovrascrivere il onTokenRefreshmetodo per visualizzarlo nella tua app Android. Dopo averlo fatto , disinstalla e reinstalla l'app e il tuo token dovrebbe 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 l'applicazione della piattaforma.
  6. Seleziona l'endpoint appena creato per il tuo dispositivo e fai clic sul pulsante Pubblica su endpoint .
  7. Seleziona il formato del messaggio JSON e fai clic sul pulsante del generatore di messaggi JSON .
  8. Immettere un messaggio di prova e fare clic sul JSON Genera tasto
  9. Ora arriva la "parte gotcha".

Il messaggio generato da SNS avrà la forma:

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

Come accennato in precedenza, i datapayload verranno ignorati se non è stato implementato alcun servizio per riceverli. Vorremmo testare senza scrivere troppo codice, quindi dovremmo inviare un notificationpayload. Per fare ciò, cambia semplicemente il messaggio JSON in:

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

Dopo averlo fatto, assicurati che la tua app non sia in esecuzione sul dispositivo e premi il pulsante Pubblica messaggio . Ora dovresti vedere una notifica pop-up sul tuo dispositivo.

Ovviamente puoi fare tutto questo in modo programmatico tramite l'API Amazon SNS, tuttavia tutti gli esempi sembrano utilizzare il datapayload, quindi devi tenerlo a mente e generare un payload appropriato al tuo caso d'uso.


2
Ottima risposta, grazie. Vale la pena notare che il json ha una certa profondità per quanto riguarda le opzioni di configurazione - vedi developers.google.com/cloud-messaging/concept-options - sebbene non abbia testato alcuna funzionalità specifica di FCM.
Tom

datai messaggi funzionano correttamente utilizzando sns anche se l'app client non implementa FCM ma GCM. Nella mia app non ho aggiornato a FCM sul lato client, ma FCM che utilizza SNS funziona bene anche per i datamessaggi. Non dovrebbe funzionare?
Sash_KP

2
SNS utilizza GCM, quindi se stai utilizzando il client GCM dovrebbe comportarsi normalmente (fino al punto in cui Google decide di ritirare GCM). Questa domanda ha più a che fare con il supporto FCM su AWS (che è supportato tramite compatibilità con le versioni precedenti sul lato API di Google)
Nathan Dunn

è possibile utilizzare argomenti sns con fmc? grazie per una risposta così fantastica
Juan Jose Tugores

Benvenuto: sì, puoi sottoscrivere individualmente endpoint push mobili (ad es. GCM-> FCM) a un argomento SNS come di consueto, tuttavia ciò genererebbe un gran numero di messaggi all'interno di AWS. Se utilizzi il lato client FCM, un'altra alternativa è utilizzare gli argomenti FCM o i segmenti utente che viaggeranno solo attraverso i server di Google
Nathan Dunn

14

Ora puoi andare alla tua console Firebase ( https://console.firebase.google.com/ ) selezionare il tuo progetto, fare clic sull'icona a forma di ingranaggio e scegliere le impostazioni del progetto, quindi fare clic sulla scheda di messaggistica cloud ...

Vedrai la chiave server legacy che è la chiave API GCM e avrai la possibilità di generare nuove chiavi server che sono le versioni di FCM

SNS accetterà entrambe le versioni, ma la loro opzione di menu la classifica ancora in GCM

Ecco l'immagine per il tuo riferimento:

inserisci qui la descrizione dell'immagine

Tieni presente che puoi rimuovere "accidentalmente" le chiavi del server, ma la chiave del server legacy non è eliminabile. Inoltre, se fai clic sul pulsante aggiungi chiave del server, otterrai una nuova chiave del server SOTTO la prima, SENZA AVVERTENZA! ... Bel lavoro Google;)


5

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


5

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

Dobbiamo 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\” } }”
}

Nella tua implementazione FirebaseMessagingService (esempio Xamarin)

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)
    {
    }
}

Dov'è il token FCM?
JPM

come posso inviare l'URL di un'immagine nel payload
tarek noaman

3

Solo una nota aggiuntiva alla risposta di Nathan Dunn: per aggiungere il suono usa il seguente messaggio JSON

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

come posso inviare l'URL di un'immagine nel payload
tarek noaman

0

Mi ci è voluto un po 'per capire come inviare la notifica con il payload giusto (pubblica sull'argomento). Quindi lo metterò qui.

private void PublishToTopic(string topicArn)
{
    AmazonSimpleNotificationServiceClient snsClient = 
           new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
    PublishRequest publishRequest = new PublishRequest();
    publishRequest.TopicArn = topicArn;
    publishRequest.MessageStructure = "json";
    string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
    publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
    PublishResponse publishResult = snsClient.Publish(publishRequest);
}    


0

Per rispondere alle domande:

  1. AWS SNS supporta FCM.
  2. No AWS non archivia i messaggi dopo l'invio di notifiche push.

Per un tutorial dettagliato sulla configurazione di FCM con SNS, leggi questo articolo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.