Używam AWS
zasobów do mojego projektu na Androida, planuję dodać usługę powiadomień push do mojego projektu z AWS SNS
. Jest kilka pytań bardzo mnie nurtujących. Nie znalazłem żadnych pytań dotyczących tego, z wyjątkiem jednego lub dwóch, ale z niejasnymi wyjaśnieniami.
1. AWS
obsługujeFCM
? SNS
pracować z GCM
. Ale Google zaleca używanie FCM zamiast GCM
. Nie znalazłem AWS
wsparcia FCM
.
Czy AWS
przechowywać wiadomości (lub dane) w swoich bazach danych nawet po wysłaniu powiadomień push?
3.Próbowałem umieścić klucz API FCM na platformie aplikacji SNS, pokazuje on nieprawidłowe parametry, dlaczego?
android
amazon-web-services
google-cloud-messaging
amazon-sns
firebase-cloud-messaging
Naroju
źródło
źródło
Odpowiedzi:
FCM jest wstecznie kompatybilny z GCM. Kroki konfiguracji FCM na AWS są identyczne z procedurą konfiguracji GCM i (przynajmniej na razie) FCM działa w sposób przejrzysty z GCM i SNS w odniesieniu do konfiguracji po stronie serwera.
Jeśli jednak wysyłasz
data
ładunki do urządzenia z systemem Android, nie będą one przetwarzane, chyba że zaimplementujesz usługę po stronie klienta, która rozszerzaFirebaseMessagingService
. Domyślny generator komunikatów JSON w konsoli AWS wysyładata
komunikaty, które będą ignorowane przez Twoją aplikację, chyba że wspomniana usługa zostanie zaimplementowana. Aby obejść ten problem podczas wstępnych testów, możesz podać niestandardowynotification
ładunek, który zostanie odebrany przez Twoje urządzenie (o ile Twoja aplikacja nie znajduje się na pierwszym planie)Istnieją instrukcje migracji GCM-FCM dostarczone przez Google, jednak zmiany, które musisz wprowadzić, dotyczą głównie strony aplikacji.
Kroki, które musisz wykonać, aby przetestować GCM / FCM w swojej aplikacji za pomocą SNS, to:
FirebaseInstanceIDService
i zastąpićonTokenRefresh
metodę, aby zobaczyć to w aplikacji na Androida. Kiedy już to zrobisz , odinstaluj i ponownie zainstaluj aplikację, a token powinien zostać wydrukowany w konsoli debugowania w Android Studio przy pierwszym uruchomieniu.Wiadomość generowana przez SNS będzie miała postać:
{ "GCM": "{ \"data\": { \"message\": \"test message\" } }" }
Jak wspomnieliśmy wcześniej,
data
ładunki będą ignorowane, jeśli nie zaimplementowano żadnej usługi do ich odbierania. Chcielibyśmy testować bez pisania zbyt dużej ilości kodu, więc zamiast tego powinniśmy wysłaćnotification
ładunek. Aby to zrobić, po prostu zmień wiadomość JSON na:{ "GCM": "{ \"notification\": { \"text\": \"test message\" } }" }
Gdy to zrobisz, upewnij się, że Twoja aplikacja nie jest uruchomiona na urządzeniu, i naciśnij przycisk Opublikuj wiadomość . Powinieneś teraz zobaczyć powiadomienie wyskakujące na twoim urządzeniu.
Oczywiście możesz to wszystko zrobić programowo za pośrednictwem Amazon SNS API, jednak wszystkie przykłady wydają się używać
data
ładunku, więc musisz o tym pamiętać i wygenerować ładunek odpowiedni dla twojego przypadku użycia.źródło
data
wiadomości działają poprawnie przy użyciu sns, nawet jeśli aplikacja kliencka nie implementuje FCM, ale GCM. W mojej aplikacji nie zaktualizowałem do FCM po stronie klienta, ale FCM używający SNS działa również dobrze w przypadkudata
wiadomości. Czy to nie powinno działać?Teraz możesz przejść do konsoli Firebase ( https://console.firebase.google.com/ ), wybrać projekt, kliknąć ikonę koła zębatego i wybrać ustawienia projektu, a następnie kliknąć kartę wiadomości w chmurze ...
Zobaczysz starszy klucz serwera, który jest kluczem interfejsu API GCM, i będziesz mieć możliwość wygenerowania nowych kluczy serwera, które są wersjami FCM
SNS zaakceptuje obie wersje, ale ich opcja menu nadal klasyfikuje ją w GCM
Oto zdjęcie w celach informacyjnych:
Pamiętaj, że możesz „przypadkowo” usunąć klucze serwera, ale klucza starszego serwera nie można usunąć. Ponadto, jeśli klikniesz przycisk dodawania klucza serwera, otrzymasz nowy klucz serwera PONIŻEJ pierwszego, BEZ OSTRZEŻENIA! ... Dobra robota Google;)
źródło
Jeszcze jedna dodatkowa uwaga do wspaniałej odpowiedzi Nathana Dunna. Jak wysłać dane z powiadomieniem z SNS do Firebase.
Musimy dodać dane do Json (wewnątrz powiadomienia):
{ "default": “any value", "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }” }
W Twojej implementacji FirebaseMessagingService (przykład 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) { } }
źródło
Próbowałem użyć rozwiązania z ładunkiem powiadomień zamiast danych, ale nie otrzymałem powiadomień push na urządzeniu mobilnym. Znalazłem ten samouczek https://youtu.be/iBTFLu30dSg z angielskimi napisami pokazującymi, jak krok po kroku używać FCM z AWS SNS i przykładem jak wysyłać powiadomienia push z konsoli AWS i wdrażać je na php z aws php sdk. Bardzo mi to pomogło.
źródło
Jeszcze jedna uwaga do odpowiedzi Nathana Dunna: aby dodać dźwięk, użyj następującego komunikatu JSON
{ "GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }" }
źródło
Zajęło mi trochę czasu, zanim wymyśliłem, jak wysłać powiadomienie z odpowiednim ładunkiem (opublikuj w temacie). Więc umieszczę to tutaj.
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); }
źródło
Amazon obsługuje FCM, ponieważ cały poprzedni kod został przeniesiony z GCM do FCM. Poniższy artykuł szczegółowo wyjaśnia.
Artykuł opublikowany przez Amazon
źródło
Aby odpowiedzieć na pytania:
Aby uzyskać szczegółowy samouczek dotyczący konfigurowania FCM za pomocą SNS, przeczytaj ten artykuł.
źródło