2013-03-01 15 views
5

Pracuję nad powiadomieniami push za pomocą Google Cloud Messaging (GCM). Mogę skonfigurować stronę serwera i klienta po this tutorial.Łączenie się z serwerem GCM działającym na lokalnym serwerze

Serwer działa na serwerze Apache Tomcat6.0 (localhost) i emulatorze systemu Android w interfejsach API Google (poziom interfejsu API 17). Mam identyfikator nadawcy i klucz API. Po uruchomieniu z emulatora otrzymuję komunikat o pomyślnym połączeniu urządzenia. Wcześniej po wysłaniu wiadomości z serwera pojawi się następujący błąd.

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401() 
com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:211) 
com.google.android.gcm.server.Sender.send(Sender.java:125) 
com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:83) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

Z innych postów rozumiem, że błędny klucz API jest winowajcą. Ale w moim przypadku upewniłem się, że używam właściwego z konsoli API.

Nawiasem mówiąc, po uruchomieniu emulatora zobaczyłem komunikat "wysyłanie wiadomości do serwera". Jaki jest identyfikator rejestracji? To nie jest to samo, co identyfikator nadawcy; wygląda jak zakodowany.

Jakieś przebicie?

EDIT

Kwestia jest ostatecznie rozwiązany! Ant nie poprawnie zbudował plik WAR. Więc klucz API prawie się nie aktualizuje. To był koszmarny koszmar, by dostrzec błąd. Dziękuję wszystkim za wkład!

+0

Emulator nie działa. Spróbuj z urządzeniem –

+0

jakiekolwiek ograniczenie poziomów urządzeń API ..? – Renjith

+0

Działa powyżej 2.2 –

Odpowiedz

2

Proponuję, aby przeczytać podręcznik GCM:

GCM guide for Android

Identyfikator nadawcy jest stałą, która ma być stosowana w komunikacyjnym pomiędzy UMK a serwerem. Identyfikator regsitratiomID (regID) jest zarządzany przez usługę GCM, gdy telefon rejestruje się w swojej usłudze.

Lepszym definicja: http://developer.android.com/google/gcm/gcm.html

Sender ID:

Szereg projekt nabyć z konsoli API, jak opisano w Getting Started. Identyfikator nadawcy jest używany w procesie rejestracji do identyfikacji aplikacji systemu Android, która może wysyłać wiadomości do urządzenia.

Rejestracja ID:

Identyfikator wydany przez serwery GCM do Android aplikacji, która pozwala na otrzymywanie wiadomości. Gdy aplikacja Android ma identyfikator rejestracyjny, wysyła go do zewnętrznego serwera aplikacji, który wykorzystuje go do identyfikacji każdego urządzenia zarejestrowanego do odbierania wiadomości dla danej aplikacji systemu Android. Innymi słowy, identyfikator rejestracji jest powiązany z konkretną aplikacją Android działającą na określonym urządzeniu.

0

Identyfikator nadawcy to numer projektu utworzony w konsoli Google.

ID Rejestracja

Gdy rejestry wniosek do GCM dostaje identyfikator rejestracji. Aby dostarczyć wiadomość, identyfikator rejestracji będzie używany przez GCM do identyfikacji urządzenia + aplikacji. Twoja aplikacja na Androida powinna przesłać ten identyfikator rejestracji do Twojego serwera, aby po wysłaniu przez serwer wiadomości mogła ona oznaczyć ją identyfikatorem rejestracji, a tym samym GCM może dostarczyć ją do właściwego urządzenia.

Diagnozę, czy identyfikator rejestracji został pomyślnie udostępniony serwerowi (Get/Post), chyba że nie otrzymasz żadnej wiadomości.

2

Konto nadawcy, którego próbujesz użyć do wysłania wiadomości, nie może zostać uwierzytelnione. Możliwe przyczyny:

  1. Brak nagłówka autoryzacji lub nieprawidłowa składnia.
  2. Nieprawidłowy numer projektu wysłany jako klucz.
  3. Klucz ważny, ale usługa GCM wyłączona.
  4. Żądanie pochodzi z serwera, który nie znajduje się na białej liście w kluczu serwera adresów IP.

Sprawdź, czy token, który wysyłasz w nagłówku Authorization, to poprawny klucz API powiązany z Twoim projektem. można sprawdzić ważność klucza API, uruchamiając następującą komendę:

api_key=YOUR_API_KEY 

curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}" 

Jeśli chcesz, aby potwierdzić ważność ID rejestracji, możesz to zrobić poprzez zastąpienie „ABC” z identyfikatorem rejestracyjnym. Zdarza się, gdy kod stanu HTTP to 401.

+0

Mam podobny problem z nowym backendem. Dziwna część to działa curl, ale wygenerowana automatycznie strona testowa w/tym samym api_key daje błąd 401 podczas wysyłania wiadomości GCM. Puzzling :-P – kenyee

Powiązane problemy