2012-08-10 22 views
9

Poniżej podano wyjątek, mimo że mój klucz API dla serwera i aplikacji przeglądarki jest prawidłowy. Sprawdziłem to za pomocą loków. Wysyłam żądanie GCM zarówno w formacie UTF-8, jak i JSON. Testowanie go z zewnętrznej sieci korporacyjnej.Kod odpowiedzi HTTP 401 w Google GCM

java.io.IOException: Server returned HTTP response code: 401 for URL: https://android.googleapis.com/gcm/send 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1345) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1339) 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:993) 
     at java.net.URLConnection.getContent(URLConnection.java:688) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent(HttpsURLConnectionImpl.java:406) 
     at gcm1.MessageUtil.sendMessage(MessageUtil.java:58) 

Czy mogę poznać przyczynę i rozwiązanie tego problemu?

+0

Dla osób, które właśnie przeglądają, jeśli nagle zacząłeś doświadczać tego błędu, nie wprowadzając żadnych konkretnych zmian (klucz serwera), to prawdopodobnie musisz zaimportować swój projekt do Firebase. Zobacz moją odpowiedź [tutaj] (http://stackoverflow.com/a/37801206/4625829). –

Odpowiedz

7

Oto możliwe przyczyny błędu 401 przy użyciu GCM:

Konto nadawcy, że próbujesz użyć, aby wysłać wiadomość nie może zostać uwierzytelniony. Możliwe przyczyny:

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

Sprawdź, czy token, który wysyłasz w nagłówku Authorization, to poprawny klucz API powiązany z Twoim projektem.

Źródło: https://developers.google.com/cloud-messaging/http-server-ref#error-codes

+0

Sprawdziłem klucz API używając curl i działa dobrze. Zwraca odpowiedź z powodzeniem: 1 w formacie JSON. Serwer znajduje się również na białej liście w kluczach IP serwera. – chako

+2

Rzecz w tym, że Google wymaga uprzedniego wstawienia klucza API z "key =" w nagłówku "Authorization". Nie ma to dla mnie sensu (jest już w polu nagłówka, a "key =" jest zbędne), ale po dodaniu go, problem został rozwiązany. – aroth

+0

Zaktualizowany link: https://developers.google.com/cloud-messaging/http-server-ref#error-codes – Jason

0

W moim przypadku problemem było to, że zapomniałem przesunięcie po ustawieniu prawidłowy klucz API w magazynie danych.

0

Postępuj zgodnie z instrukcjami podanymi poniżej, aby pomóc.

Aktualizacja: Wydaje się również, że migracja z GCM do FCM rozwiązuje problem 401 nieautoryzowanego błędu.

Jeśli dopiero zaczynasz używać GCM, zamiast tworzyć projekt w Google Developers Console, zrób to w konsoli Firebase. Po utworzeniu projektu wystarczy użyć wygenerowanego automatycznie klucza serwera. Oto kroki, aby znaleźć klucz serwera:

  1. Przejdź do konsoli Firebase i kliknij UTWÓRZ NOWE PROJEKTY.
  2. Wpisz żądaną nazwę projektu i wybierz swój kraj. Po tym, nowy projekt powinien być aktywny.
  3. Następnie na lewym panelu kliknij przycisk koła zębatego i wybierz Ustawienia projektu .
  4. Następnie przejdź do zakładki Cloud-Messaging.

Dla starych GCM projektów, można po prostu zaimportować projekt konsoli Firebase:

  1. Przejdź do konsoli Firebase i kliknij PROJECT importu.
  2. Wybierz projekt, który chcesz zaimportować, i swój kraj.
  3. Kliknij DODAJ OGNIOFUNKĘ. Następnie nowy projekt powinien być aktywny.
  4. Następnie na lewym panelu kliknij przycisk koła zębatego i wybierz Ustawienia projektu .
  5. Następnie przejdź do zakładki Cloud-Messaging.
Powiązane problemy