7

Próbuję wysyłać powiadomienia mobilne push do GCM przez AWS SNS. Zgodnie z najnowszą wersją GCM 3.0 documentation, może ona zawierać ładunek "powiadomienie" lub ładunek "danych" (lub oba). Jeśli wyślesz ładunek powiadomienia, GCM zadba o to, aby powiadomienie pojawiło się na urządzeniu użytkownika końcowego.Wysyłanie ładunku zawierającego tylko powiadomienie do GCM przy użyciu AWS SNS

Korzystanie z Amazon SNS konsolę, próbowałem wysyłanie powiadomień tylko ładunek, ale napotkał następujący błąd:

Invalid parameter: Message Reason: Invalid notification for protocol GCM: data key is expected in the json message (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter)

wyślę:

{ 
    "GCM":"{\"notification\":{\"title\":\"Test Message\"}}" 
} 

Podejrzewam, że to może być problem z SNS wciąż zgodny z poprzednią wersją GCM i dlatego oczekuje klucza "danych", ale nie jestem pewien. Czy ktoś ma podobny problem lub ma z tym jakieś doświadczenie? Dzięki!

EDYTOWANIE: Aby wyjaśnić, chcę wysłać GCM ładunek powiadomień i automatycznie wyświetlać ostrzeżenie dla użytkownika zgodnie z opisem w dokumentacji. W tej chwili zaczynam się zastanawiać, czy SNS wysyła dalej powiadomienie do urządzenia.

+0

Co się stanie, jeśli dodasz właściwość danych i po prostu zostawisz pusty ciąg? – cYrixmorten

+1

@ blurixmorten, dobry punkt. To z pewnością zadziała, ale naprawdę chcę, aby GCM rozpoznał ładunek powiadomień i automatycznie wyświetlił ostrzeżenie zgodnie z dokumentacją. Tak się nie dzieje, gdy wysyłam pusty ciąg danych. – weiy

+0

W porządku, pomyślałem, że to może być wystarczająco "sprytne", aby rozpoznać, że wartość danych była pusta. Mam tylko doświadczenie w implementowaniu obsługi instalacji GCM (dawno temu i żmudnie), a następnie używam parse.com. Ten ostatni działa bardzo dobrze i jest łatwy w konfiguracji. – cYrixmorten

Odpowiedz

10

Aby odpowiedzieć na moje własne pytanie, otrzymałem następujące z AWS Wsparcie na swoich forach:

You are correct, SNS does not currently support GCM's "notification" payload type as described in their documentation. SNS supports the initial "data" payload type only but we are actively working on a solution to support the "notification" type. In the meantime, the "data" payload works the same except the client app is responsible for processing data messages as it has in the past.

Więc dopóki SNS wspomaga właściwe powiadomienia GCM, musisz obsłużyć wyświetlanie powiadomień siebie poprzez rozszerzenie klasy GcmListenerService i przesłonięcie metody onMessageReceived.

AKTUALIZACJA 10/2015: Wygląda na to, że SNS wdrożyło obsługę ładunków z powiadomieniami GCM. Jeśli uwzględnisz zarówno ładunki "dane", jak i "powiadomienia", pierwszeństwo będzie miało "powiadomienie". Obserwowałem to zachowanie tylko w SNS, ale nie mogłem znaleźć żadnego bloga/artykułów o tym ogłoszeniu.

+0

Dzięki Weiy, znaleźliśmy to cenne - patrząc na dane, które otrzymuję, gdy wysyłam {"GCM": "{\" notification \ ": {\" title \ ": \" Title \ ", \" body \ ": \ "Body \"}, \ "data \": {}} "}, widzę klucz" gcm.notification.title "w moim pakiecie danych. Zgaduję, że przedrostki SNS mają "gcm", ponieważ historycznie użytkownicy SNS mogą używać klucza "powiadomienie" dla innych danych. Na czas nieokreślony, myślę, że będziesz musiał rozpakować dane z gcm.notification.X, a nie będziemy mogli używać specyfikacji gcm 3.0. – Sean

+0

Dzięki za to. Po godzinach przeszukiwania Interwebs w końcu znalazłem to i naprawiłem mój problem. Używając właśnie 'danych' moje tytuły powiadomień były zawsze' GCM MESSAGE'. Struktura 'notification' naprawia to! Dokumenty SNS nie wydają się być aktualne, aby to odzwierciedlić. – Luke

Powiązane problemy