2012-08-10 14 views
9

Di seguito è l'eccezione che ottengo anche se la mia chiave API per l'applicazione server e browser è valida. L'ho controllato usando l'arricciatura. Invio la richiesta GCM in entrambi i formati UTF-8 e JSON. Provarlo da una rete aziendale esterna.Codice di risposta HTTP 401 in 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) 

Posso conoscere il motivo e la soluzione per questo?

+0

Per gli utenti che stanno navigando in questo momento, se all'improvviso si è verificato questo errore senza apportare modifiche specifiche (la chiave del server) uguali, è probabilmente necessario importare il progetto in Firebase. Vedi la mia risposta [qui] (http://stackoverflow.com/a/37801206/4625829). –

risposta

7

Ecco le possibili cause di errore 401 quando si utilizza GCM:

L'account del mittente che si sta tentando di utilizzare per inviare un messaggio non poteva essere autenticato. Possibili cause sono:

  • Intestazione di autorizzazione mancante o con sintassi non valida.
  • ID progetto non valido inviato come chiave.
  • Chiave valida ma con servizio GCM disabilitato.
  • Richiesta originata da un server non autorizzato nella IP della chiave server.

Verificare che il token che si sta inviando nell'intestazione Autorizzazione sia la chiave API corretta associata al progetto.

Fonte: https://developers.google.com/cloud-messaging/http-server-ref#error-codes

+0

Ho controllato la mia chiave API usando curl e funziona correttamente. Restituisce la risposta con successo: 1 in formato JSON. Il server è anche elencato in bianco negli IP chiave del server. – chako

+2

La cosa che mi ha convinto è che Google richiede che si precluda la chiave API con "chiave =" nell'intestazione "Autorizzazione". Questo non ha senso per me (è già in un campo di intestazione, avere 'key =' è superfluo), ma una volta che l'ho aggiunto, il problema è risolto. – aroth

+0

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

0

Nel mio caso il problema era che mi sono dimenticato di ridistribuire dopo aver impostato chiave API corretta nel datastore.

0

Si prega di seguire come da istruzioni qui sotto può essere di aiuto.

Aggiornamento: Sembra anche che Migrazione da GCM a FCM risolva il problema per 401 Errore non autorizzato.

Se stai iniziando a utilizzare GCM, invece di creare un progetto nella Google Developers Console, fallo nella console di Firebase. Dopo aver creato il progetto, usa semplicemente la chiave del server generata automaticamente. Ecco i passaggi in cui trovare la chiave del server:

  1. Passare alla console Firebase e fare clic su CREA NUOVO PROGETTO.
  2. Compilare il Nome progetto desiderato e selezionare il Paese. Dopo questo, il nuovo Progetto dovrebbe essere attivo.
  3. Quindi sul pannello di sinistra, fare clic sul pulsante a forma di ingranaggio e selezionare Progetto Impostazioni.
  4. Quindi andare alla scheda di messaggistica cloud.

Per vecchi GCM progetti, si può semplicemente importare il progetto alla console Firebase:

  1. Vai alla console Firebase e cliccare su Importa progetto.
  2. Selezionare il progetto che si desidera importare e il proprio paese.
  3. Fare clic su AGGIUNGI FORBICE. Dopo questo, il nuovo progetto dovrebbe essere attivo.
  4. Quindi sul pannello di sinistra, fare clic sul pulsante a forma di ingranaggio e selezionare Progetto Impostazioni.
  5. Quindi andare alla scheda di messaggistica cloud.
Problemi correlati