FCM z AWS SNS

94

Używam AWSzasobó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. AWSobsługujeFCM ? SNSpracować z GCM. Ale Google zaleca używanie FCM zamiast GCM. Nie znalazłem AWSwsparcia FCM.

Czy AWSprzechowywać 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?

Naroju
źródło
SNS nie obsługuje jeszcze FCM, używa wycofanej wersji GCM. Skąd bierzesz klucz API?
Arthur Thompson,
1
Próbowałem, próbowałem umieścić klucz API FCM w SNS i to nie zadziałało, po przeczytaniu dokumentu w AWS (SNS) wspomnieli o umieszczeniu klucza serwera. Próbowałem, to zadziałało dobrze. Jestem w stanie wysyłać powiadomienia push przez SNS dla FCM. Nie wiem dokładnie, dlaczego to zadziałało. Czy na pewno SNS nie obsługuje obecnie FCM?
Naroju
Prawdą jest, że klucz serwera jest wymagany do wysyłania komunikatów GCM (obecnie FCM). Po stronie klienta (urządzenie mobilne) GCM i FCM są generalnie takie same, więc oba będą odbierać wiadomości w oczekiwany sposób. Jednak są pewne funkcje FCM, które nie będą działać, np. Przesyłanie wiadomości tematycznych.
Arthur Thompson,
czy można używać tematów sns z fmc? dziękuję za tak niesamowitą odpowiedź
Juan Jose Tugores,
jakie są korzyści z używania SNS w pierwszej kolejności? czy FCM nie powinno wystarczyć?
Khaled Osman

Odpowiedzi:

192

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 rozszerza FirebaseMessagingService. Domyślny generator komunikatów JSON w konsoli AWS wysyła datakomunikaty, 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ć niestandardowy notificationł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:

  1. Utwórz aplikację platformy w SNS , wybierając Google Cloud Messaging (GCM) jako platformę powiadomień push i podając klucz API serwera w polu API key .
  2. Wybierz aplikację platformy i kliknij przycisk Utwórz punkt końcowy platformy .
  3. Podaj identyfikator wystąpienia ( token urządzenia ) wygenerowany przez aplikację. Musisz przedłużyćFirebaseInstanceIDService i zastąpić onTokenRefreshmetodę, 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.
  4. Kliknij Dodaj punkt końcowy .
  5. Kliknij łącze ARN dla swojej aplikacji platformy.
  6. Wybierz nowo utworzony punkt końcowy dla swojego urządzenia i kliknij punkt Publikuj w punkcie końcowym .
  7. Wybierz format wiadomości JSON i kliknij plik przycisk generatora wiadomości JSON .
  8. Wpisz wiadomość testową i kliknij Generuj JSON przycisk
  9. Teraz czas na część „gotcha”.

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.

Nathan Dunn
źródło
2
Świetna odpowiedź, dzięki. Warto zauważyć, że json ma pewną głębię w zakresie opcji konfiguracyjnych - patrz developers.google.com/cloud-messaging/concept-options - chociaż nie testowałem żadnej funkcji specyficznej dla FCM.
Tom
datawiadomoś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 przypadku datawiadomości. Czy to nie powinno działać?
Sash_KP
2
SNS używa GCM, więc jeśli używasz klienta GCM, powinien on zachowywać się normalnie (do momentu, gdy Google zdecyduje się na wycofanie GCM). To pytanie jest bardziej związane z obsługą FCM w AWS (która jest obsługiwana przez kompatybilność wsteczną po stronie Google API)
Nathan Dunn
czy można używać tematów sns z fmc? dziękuję za tak niesamowitą odpowiedź
Juan Jose Tugores,
Witamy - tak, możesz normalnie subskrybować punkty końcowe mobile push (tj. GCM-> FCM) do tematu SNS, jednak generowałoby to dużą liczbę wiadomości w AWS. Jeśli korzystasz z klienta FCM, inną alternatywą jest użycie tematów FCM lub segmentów użytkowników, które będą przesyłane tylko przez serwery Google
Nathan Dunn
14

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:

wprowadź opis obrazu tutaj

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;)

Reza
źródło
6

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)
    {
    }
}
Adys
źródło
Gdzie jest token FCM?
JPM
jak mogę wysłać adres URL obrazu w ładunku
tarek noaman
5

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.

Arbron
źródło
3

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\" } }"
}
Shao Yuan Chew Chia
źródło
jak mogę wysłać adres URL obrazu w ładunku
tarek noaman
0

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);
}    
Alexey
źródło
0

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

Epistemolog
źródło
Należy to czytać, ponieważ Amazon nie obsługuje GCM
Siva Karthikeyan
-1

Aby odpowiedzieć na pytania:

  1. AWS SNS obsługuje FCM.
  2. Żaden AWS nie przechowuje wiadomości po wysłaniu powiadomień push.

Aby uzyskać szczegółowy samouczek dotyczący konfigurowania FCM za pomocą SNS, przeczytaj ten artykuł.

NS Mehra
źródło