wake-up-neo.com

FCM mit AWS SNS

Ich verwende AWS-Ressourcen für mein Android-Projekt. Ich plane, den Push-Benachrichtigungsdienst für mein Projekt mit AWS SNS hinzuzufügen. Ich habe keine Fragen dazu gefunden, außer ein oder zwei, jedoch mit unklaren Erklärungen.

1. Unterstützt AWS Unterstützung FCM? SNS arbeitet mit GCM. Google empfiehlt jedoch die Verwendung von FCM anstelle von GCM. Ich habe nicht gefunden, dass AWSFCM unterstützt.

2. Speichern AWS Nachrichten (oder Daten) auch nach dem Senden von Push-Benachrichtigungen in ihren Datenbanken?

3.Ich habe versucht, FCM-API-Schlüssel in die SNS-Anwendungsplattform zu stecken. Es werden ungültige Parameter angezeigt, warum?

83
Naroju

FCM ist rückwärtskompatibel mit GCM. Die Schritte zum Einrichten von FCM unter AWS sind identisch mit GCM-Einrichtungsverfahren und (zumindest für den Moment), dass FCM in Bezug auf die serverseitige Konfiguration transparent mit GCM und SNS arbeitet.

Allerdings, wenn Sie data-Nutzdaten an das Android-Gerät senden, werden diese nicht verarbeitet, es sei denn, Sie implementieren einen clientseitigen Dienst , der FirebaseMessagingService erweitert. Der standardmäßige JSON-Nachrichtengenerator in der AWS-Konsole sendet data-Nachrichten, die von Ihrer App ignoriert werden, sofern der oben genannte Dienst nicht implementiert ist. Um dies für erste Tests zu umgehen, können Sie eine benutzerdefinierte notification-Nutzlast angeben, die von Ihrem Gerät empfangen wird (sofern sich Ihre App nicht im Vordergrund befindet).

Es werden GCM-FCM-Migrationsanweisungen von Google bereitgestellt. Die Änderungen, die Sie vornehmen müssen, betreffen jedoch überwiegend die App-Seite.

Um GCM/FCM in Ihrer App mit SNS zu testen, müssen Sie folgende Schritte ausführen:

  1. Erstellen Sie eine Plattformanwendung in SNS , wählen Sie Google Cloud Messaging (GCM) als Push-Benachrichtigungsplattform aus und geben Sie Ihren Server-API-Schlüssel im API-Schlüssel an. Feld.
  2. Wählen Sie die Plattformanwendung aus und klicken Sie auf die Schaltfläche Create Platform Endpoint.
  3. Geben Sie die von Ihrer App generierte InstanceID (Device Token) an. Sie müssen die Variable FirebaseInstanceIDService erweitern und die Methode onTokenRefresh überschreiben, um dies in Ihrer Android-App anzuzeigen. Wenn Sie haben Sie dies getan , deinstallieren Sie die App und installieren Sie sie erneut. Das Token sollte beim ersten Start in der Debug-Konsole in Android Studio gedruckt werden.
  4. Klicken Sie auf die Schaltfläche Endpunkt hinzufügen.
  5. Klicken Sie auf den ARN-Link für Ihre Plattformanwendung.
  6. Wählen Sie den neu erstellten Endpunkt für Ihr Gerät aus und klicken Sie auf die Schaltfläche Auf Endpunkt veröffentlichen.
  7. Wählen Sie das JSON-Format Message Format aus und klicken Sie auf die Schaltfläche JSON Message Generator.
  8. Geben Sie eine Testnachricht ein und klicken Sie auf die Schaltfläche Generate JSON
  9. Jetzt kommt der "Gotcha-Teil".

Die Nachricht, die von SNS generiert wird, hat die Form:

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

Wie bereits erwähnt, werden data-Payloads ignoriert, wenn kein Dienst implementiert wurde, um sie zu erhalten. Wir möchten testen, ohne zu viel Code schreiben zu müssen. Stattdessen sollten wir eine notification-Nutzlast senden. Ändern Sie dazu einfach die JSON-Nachricht in:

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

Stellen Sie anschließend sicher, dass Ihre App nicht auf dem Gerät ausgeführt wird, und klicken Sie auf die Schaltfläche Publish Message. Sie sollten jetzt eine Benachrichtigung auf Ihrem Gerät sehen.

Natürlich können Sie dies alles programmgesteuert über die Amazon SNS-API durchführen, jedoch scheinen alle Beispiele die data-Nutzlast zu verwenden, so dass Sie dies berücksichtigen und eine für Ihren Anwendungsfall geeignete Nutzlast generieren müssen.

163
Nathan Dunn

Nun können Sie zu Ihrer Firebase-Konsole ( https://console.firebase.google.com/ ) wechseln, Ihr Projekt auswählen, auf das Zahnradsymbol klicken und Projekteinstellungen auswählen, dann auf die Registerkarte Cloud-Messaging klicken.

Sie sehen den alten Server-Schlüssel, den GCM-API-Schlüssel, und Sie haben die Möglichkeit, neue Server-Schlüssel zu generieren, die die FCM-Versionen sind

SNS akzeptiert beide Versionen, aber ihre Menüoption kategorisiert sie immer noch unter GCM

Hier ist bild für ihre referenz:

 enter image description here

Beachten Sie, dass Sie Ihre Serverschlüssel "versehentlich" entfernen können, der Legacy-Serverschlüssel kann jedoch nicht gelöscht werden. Wenn Sie auf die Schaltfläche zum Hinzufügen des Serverschlüssels klicken, erhalten Sie unter dem ersten einen neuen Serverschlüssel, OHNE WARNUNG! ... Gute Arbeit Google;)

13
Reza

Ich habe versucht, die Lösung mit Benachrichtigungs-Payload anstelle von Daten zu verwenden, erhielt jedoch keine Push-Benachrichtigungen auf dem mobilen Gerät. Ich habe dieses Tutorial https://youtu.be/iBTFLu30dSg mit englischen Untertiteln zur Verwendung von FCM mit AWS SNS Schritt für Schritt und Beispiel für das Senden von Push-Benachrichtigungen von der AWS-Konsole und deren Implementierung mit aws PHP gefunden sdk. Es hat mir sehr geholfen.

5
Arbron

Noch eine weitere Anmerkung zu Nathan Dunns großartiger Antwort ... Wie man Daten mit der Benachrichtigung von SNS an Firebase sendet.

Wir müssen dem Json Daten hinzufügen (in der Benachrichtigung):

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

In Ihrer FirebaseMessagingService-Implementierung (Xamarin-Beispiel)

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

Nur eine zusätzliche Anmerkung zu Nathan Dunns Antwort: Um Sound hinzuzufügen, verwenden Sie die folgende JSON-Nachricht

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

Amazon unterstützt FCM, da der gesamte vorherige Code von GCM zu FCM migriert wurde. Der folgende Artikel erklärt ausführlich.

Artikel veröffentlicht von Amazon

0
Epistemologist

Ich habe eine Weile gebraucht, um herauszufinden, wie ich die Benachrichtigung mit der richtigen Nutzlast senden kann (in Thema veröffentlichen). Also werde ich es hier setzen.

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
Alexey

Um die Fragen zu beantworten:

  1. AWS SNS unterstützt FCM nicht.
  2. Nein, AWS speichert nach dem Senden von Push-Benachrichtigungen keine Nachrichten.

Für ein ausführliches Tutorial zum Einrichten von FCM mit SNS lesen Sie bitte diesen Artikel.

0
N. S. Mehra