FCM mit AWS SNS


94

Ich verwende AWSRessourcen für mein Android-Projekt. Ich plane, einen Push-Benachrichtigungsdienst für mein Projekt AWS SNShinzuzufügen. Es gibt nur wenige Fragen, die mich sehr stören. Ich habe keine Fragen dazu gefunden, außer ein oder zwei, aber mit unklaren Erklärungen.

1. AWSUnterstützt FCM? SNSarbeiten mit GCM. Google empfiehlt jedoch die Verwendung von FCM anstelle von GCM. Ich fand keine AWSUnterstützung FCM.

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

3. Ich habe versucht, den FCM-API-Schlüssel in die SNS-Anwendungsplattform einzufügen. Es werden ungültige Parameter angezeigt. Warum?


SNS unterstützt FCM noch nicht, es verwendet eine veraltete Version von GCM. Woher bekommen Sie den API-Schlüssel?
Arthur Thompson

1
Was ich versucht habe war, ich habe versucht, den API-Schlüssel von FCM in SNS zu setzen, und es hat nicht funktioniert. Nachdem ich das Dokument in AWS (SNS) gelesen hatte, wurde erwähnt, dass der Serverschlüssel abgelegt werden soll. Ich habe versucht, es hat gut funktioniert. Ich kann Push-Benachrichtigungen über SNS für FCM senden. Ich weiß nicht genau, warum es funktioniert hat. Sind Sie sicher, dass SNS FCM derzeit nicht unterstützt?
Naroju

Es ist richtig, dass der Serverschlüssel zum Senden von GCM-Nachrichten (jetzt FCM) erforderlich ist. Auf der Clientseite (mobiles Gerät) sind GCM und FCM im Allgemeinen identisch, sodass beide Nachrichten erwartungsgemäß empfangen. Es gibt jedoch einige FCM-Funktionen, die nicht funktionieren, z. B. Themen-Messaging.
Arthur Thompson

ist es möglich, sns themen mit fmc zu verwenden? Vielen Dank für eine so tolle Antwort
Juan Jose Tugores

Was ist der Vorteil von SNS an erster Stelle? sollte FCM nicht genug sein?
Khaled Osman

Antworten:


187

FCM ist abwärtskompatibel mit GCM. Die Schritte zum Einrichten von FCM unter AWS sind identisch mit dem GCM-Einrichtungsverfahren, und (zumindest im Moment) arbeitet FCM in Bezug auf die serverseitige Konfiguration transparent mit GCM und SNS zusammen.

Allerdings , wenn Sie, senden die dataNutzlasten auf dem Android - Gerät werden sie nicht verarbeitet werden , wenn Sie einen implementieren Client - Seite Service , die erweitert FirebaseMessagingService. Der Standard-JSON-Nachrichtengenerator in der AWS-Konsole sendet dataNachrichten, 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 notificationNutzlast bereitstellen , die von Ihrem Gerät empfangen wird (solange Ihre App nicht im Vordergrund steht).

Es gibt GCM-FCM-Migrationsanweisungen von Google. Die Änderungen, die Sie vornehmen müssen, sind jedoch überwiegend auf der App-Seite.

Die Schritte, die Sie ausführen müssen, um GCM / FCM in Ihrer App mit SNS zu testen, sind:

  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 Feld API-Schlüssel an .
  2. Wählen Sie die Plattformanwendung aus und klicken Sie auf die Schaltfläche Plattformendpunkt erstellen .
  3. Geben Sie die von Ihrer App generierte InstanceID ( Geräte-Token ) an. Sie müssen FirebaseInstanceIDServicedie onTokenRefreshMethode erweitern und überschreiben , um dies in Ihrer Android-App anzuzeigen. Sobald Sie dies getan haben , deinstallieren Sie Ihre App und installieren Sie sie erneut. Ihr Token sollte beim ersten Start auf 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- Nachrichtenformat aus und klicken Sie auf die Schaltfläche JSON-Nachrichtengenerator .
  8. Geben Sie eine Testnachricht ein und klicken Sie auf die Schaltfläche JSON generieren
  9. Jetzt kommt der "Gotcha-Teil".

Die von SNS generierte Nachricht hat folgende Form:

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

Wie bereits erwähnt, werden dataNutzdaten ignoriert, wenn kein Dienst zum Empfangen implementiert wurde. Wir möchten testen, ohne zu viel Code zu schreiben, daher sollten wir stattdessen eine notificationNutzlast 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 Nachricht veröffentlichen . Auf Ihrem Gerät sollte jetzt eine Benachrichtigung angezeigt werden.

Sie können dies natürlich programmgesteuert über die Amazon SNS-API tun. Alle Beispiele scheinen jedoch die dataNutzlast zu verwenden. Sie müssen dies berücksichtigen und eine Nutzlast generieren, die Ihrem Anwendungsfall entspricht.


2
Geniale Antwort, danke. Es ist erwähnenswert, dass der JSON eine gewisse Tiefe in Bezug auf Konfigurationsoptionen hat - siehe developer.google.com/cloud-messaging/concept-options - obwohl ich keine FCM-spezifischen Funktionen getestet habe.
Tom

dataNachrichten funktionieren mit sns einwandfrei, auch wenn die Client-App nicht FCM, sondern GCM implementiert. In meiner App habe ich auf Client-Seite kein Upgrade auf FCM durchgeführt, aber FCM mit SNS funktioniert auch für dataNachrichten. Sollte es nicht funktionieren?
Sash_KP

2
SNS verwendet GCM. Wenn Sie also den GCM-Client verwenden, sollte er sich normal verhalten (bis zu dem Zeitpunkt, an dem Google beschließt, GCM einzustellen). Diese Frage hat mehr mit der FCM-Unterstützung unter AWS zu tun (die über die Abwärtskompatibilität auf der Google API-Seite unterstützt wird)
Nathan Dunn

ist es möglich, sns themen mit fmc zu verwenden? Vielen Dank für eine so tolle Antwort
Juan Jose Tugores

Willkommen - ja, Sie können mobile Push-Endpunkte (z. B. GCM-> FCM) für ein SNS-Thema wie gewohnt einzeln abonnieren. Dies würde jedoch eine große Anzahl von Nachrichten in AWS generieren. Wenn Sie die FCM-Clientseite verwenden, können Sie auch FCM-Themen oder Benutzersegmente verwenden, die nur über die Server von Google übertragen werden
Nathan Dunn,

14

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

Sie sehen den alten Serverschlüssel, der der GCM-API-Schlüssel ist, und Sie haben die Möglichkeit, neue Serverschlüssel zu generieren, bei denen es sich um die FCM-Versionen handelt

SNS akzeptiert beide Versionen, aber die Menüoption kategorisiert sie weiterhin unter GCM

Hier ist ein Bild als Referenz:

Geben Sie hier die Bildbeschreibung ein

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


5

Ich habe versucht, eine Lösung mit Benachrichtigungsnutzdaten anstelle von Daten zu verwenden, habe jedoch keine Push-Benachrichtigungen auf dem Mobilgerät erhalten. Ich fand dieses Tutorial https://youtu.be/iBTFLu30dSg mit englischen Untertiteln zur schrittweisen Verwendung von FCM mit AWS SNS und ein Beispiel für das Senden von Push-Benachrichtigungen von der AWS-Konsole und deren Implementierung auf PHP mit aws php sdk. Es hat mir sehr geholfen.


5

Noch eine zusätzliche Anmerkung zu Nathan Dunns großartiger Antwort. So senden Sie Daten mit der Benachrichtigung von SNS an Firebase.

Wir müssen dem Json Daten hinzufügen (innerhalb 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)
    {
    }
}

Wo ist der FCM-Token?
JPM

Wie kann ich eine Bild-URL in der Nutzlast senden
Tarek Noaman

3

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\" } }"
}

Wie kann ich eine Bild-URL in der Nutzlast senden
Tarek Noaman

0

Ich habe eine Weile gebraucht, um herauszufinden, wie ich die Benachrichtigung mit der richtigen Nutzlast senden kann (zum 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

Um die Fragen zu beantworten:

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

Ein ausführliches Tutorial zum Einrichten von FCM mit SNS finden Sie in diesem Artikel.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.