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 AWS
FCM
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?
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:
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.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.
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:
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;)
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.
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)
{
}
}
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\" } }"
}
Amazon unterstützt FCM, da der gesamte vorherige Code von GCM zu FCM migriert wurde. Der folgende Artikel erklärt ausführlich.
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);
}
Um die Fragen zu beantworten:
Für ein ausführliches Tutorial zum Einrichten von FCM mit SNS lesen Sie bitte diesen Artikel.