2012-08-10 17 views
9

A continuación aparece la excepción que recibo aunque mi clave de API para servidor y aplicación de navegador sea válida. Lo revisé usando curl. Envío una solicitud de GCM en formato UTF-8 y JSON. Probándolo desde una red corporativa externa.código de respuesta HTTP 401 en 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) 

¿Sé el motivo y la solución para esto?

+0

Para otras personas que están navegando en este momento, si de repente comenzaste a experimentar este error sin hacer ningún cambio específico (la clave del servidor) igual, probablemente necesites importar tu proyecto a Firebase. Ver mi respuesta [aquí] (http://stackoverflow.com/a/37801206/4625829). –

Respuesta

7

Estas son las posibles causas de error 401 cuando se utiliza GCM:

La cuenta de remitente que usted está tratando de utilizar para enviar un mensaje no pudo ser autenticada. Las causas posibles son:

  • Cabecera de autorización faltante o con sintaxis no válida.
  • ID de proyecto no válido enviado como clave.
  • Clave válida pero con el servicio GCM deshabilitado.
  • La solicitud se originó a partir de un servidor que no figura en la lista blanca en las direcciones IP clave del servidor.

Compruebe que el token que está enviando dentro del encabezado Autorización es la clave API correcta asociada a su proyecto.

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

+0

Comprobé mi clave API usando curl y está funcionando bien. Devuelve la respuesta con éxito: 1 en formato JSON. El servidor también aparece en la lista blanca en IP de clave del servidor. – chako

+2

Lo que me atrapó es que Google requiere que prefija su clave API con 'clave =' en el encabezado 'Autorización'. Esto no tiene sentido para mí (ya está en un campo de encabezado, tener 'key =' es superfluo), pero una vez que lo agregué, se solucionó el problema. – aroth

+0

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

0

En mi caso, el problema era que se me olvidó volver a implementar después de establecer clave del API correcta en el almacén de datos.

0

Por favor, siga las instrucciones a continuación puede ser de ayuda.

Actualización: También parece que La migración de GCM a FCM soluciona el problema del error 401 no autorizado.

Si recién está empezando a usar GCM, en lugar de crear un proyecto en Google Developers Console, hágalo en la Consola de Firebase. Después de crear el proyecto, simplemente use la clave de servidor generada automáticamente. Estos son los pasos para encontrar la clave del servidor:

  1. Vaya a la consola de Firebase y haga clic en CREAR NUEVO PROYECTO.
  2. Complete el nombre del proyecto deseado y seleccione su país. Después de esto, , el nuevo Proyecto debería estar activo.
  3. Luego, en el panel izquierdo, haga clic en el botón de engranaje y seleccione Proyecto Configuración.
  4. Luego, vaya a la pestaña Cloud-Messaging.

Para viejos GCM proyectos, sólo tiene que importar el proyecto a la consola de Firebase:

  1. Ir a la consola Firebase y haga clic en Importar proyecto.
  2. Seleccione el proyecto que desea importar y su país.
  3. Haga clic en AÑADIR FIREBASE. Después de esto, el nuevo Proyecto debería estar activo.
  4. Luego, en el panel izquierdo, haga clic en el botón de engranaje y seleccione Proyecto Configuración.
  5. Luego, vaya a la pestaña Cloud-Messaging.
Cuestiones relacionadas