android - notification - GCM http 401 error de autorización
send push notification to android (13)
Cuando mi servidor back-end envía solicitudes de publicación a servidores GCM, recibo un error de autorización HTTP 401.
Seguí los pasos que se describen aquí:
http://developer.android.com/google/gcm/http.html#auth_error
>> api_key=AIzaSyDEy3...
>> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{/"registration_id/":/"ABC/"}"
Entiendo esto:
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
En la solución de problemas dice:
Authentication Error
The sender account that you''re trying to use to send a message couldn''t be authenticated. Possible causes are:
1. Authorization header missing or with invalid syntax.
2. Invalid project number sent as key.
3. Key valid but with GCM service disabled.
4. Request originated from a server not whitelisted in the Server Key IPs.
Tengo preguntas sobre eso:
- ¿Es correcto el encabezado en la solicitud de curl?
- ¿Quieren decir "api_key" (AIzaSy ...) o el número de Proyecto como 8305134 ....?
- ¿Cómo puedo incluir en la lista blanca mi IP de clave del servidor?
- Si estoy ejecutando el comando curl, ¿tengo que incluir en la lista blanca la dirección IP de mi computadora?
Yo tuve el mismo problema. Estaba usando la clave Android como se menciona en las instrucciones en http://developer.android.com/google/gcm/gs.html. Pero en realidad tuve que usar la clave del servidor para autenticarme desde mi ventana de Fiddler y el ejemplo de PushSharp.
¿Quieren decir "api_key" (AIzaSy ...) o el número de Proyecto como 8305134 ....?
Significa Server key que debe agregarse en su secuencia de comandos curl. El número del proyecto no se debe usar para enviar mensajes del lado del servidor.
Para crear la nueva clave del servidor, siga los pasos,
- Vaya a https://cloud.google.com/console/project
- Haga clic en su proyecto
- Ir a API y autenticación en el panel izquierdo
- Seleccione Credenciales en el submenú en el Panel izquierdo
- En Acceso público a la API , haga clic en " Crear nueva clave "
- Elija ''Servidor''
- En el siguiente cuadro de diálogo, especifique las IP incluidas en la lista blanca, si tiene alguna. Dejándolo en blanco, las solicitudes serán de cualquier IP
- Haga clic en Crear .
- Descubrirá que la nueva clave de servidor se creó en " Acceso público a API "
Esta clave se debe usar para enviar mensajes en su secuencia de comandos en el lado del servidor.
¿Cómo puedo incluir en la lista blanca mi IP de clave del servidor?
Puede incluir en la lista blanca al crear la clave del servidor.
Si estoy ejecutando el comando curl, ¿tengo que incluir en la lista blanca la dirección IP de mi computadora?
Para fines de prueba, no es necesario especificar la IP. Para fines comerciales, es posible que desee.
La configuración de advertencia de IP a 0.0.0.0/0 como se menciona en la guía de introducción permitirá todas las direcciones IPv4, pero no IPv6.
No sé la sintaxis del comando
curl
, pero parece extraño que un encabezado especifiques como--header "key: value"
mientras que el otro se especifique como--header key:"value"
. Quizás uno de ellos es incorrecto. Además, debe cambiarregistration_id:ABC
a"{/"registration_ids/":[/"ABC/"]}"
.Significan la clave API.
Si no definió una lista de IP blancas enumeradas cuando creó su clave API, debería aparecer en blanco por defecto.
Las cosas de arriba están todas hechas y luego verificar la operación de inicio de curl
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
está incluido o no si no está entonces incluye la función
Tuve el mismo problema. Lo que hice fue:
- Clear IP Whitelist que se configurará en Cualquier IP automáticamente.
- Regenerar la clave del servidor y usar la nueva clave generada.
Se producirá un problema no autorizado mientras haya una falta de coincidencia en la clave de la API. Borre la clave del servidor y regenere una nueva. Use la clave API del servidor en la codificación del lado del servidor. Y usa correctamente la ID del remitente en el cliente de Android
Finalmente encontré mi problema
Hice el encabezado de autorización HTTP como esta
Authorization:[Api key]
Solución
Me faltaba ''key ='' + [Su clave Api] en el encabezado Authorization,
por lo que el encabezado HTTP completo será
Authorization:key=Apikey
Tuve el mismo problema. Lo que estaba haciendo es que, en lugar de la clave API, estaba enviando un mensaje y, en lugar del mensaje, estaba enviando la clave de la API. Simplemente verifica si estás cometiendo un error el mismo error.
ACTUALIZAR:
Google ha cambiado la consola, ahora tienes que:
- Vaya a https://console.developers.google.com
- Seleccione su proyecto (menú desplegable en la parte superior)
- Seleccione Información general en el menú en el panel izquierdo
- Seleccione Google Cloud Messaging en el título de Mobile APIs
- Haga clic en el botón Activar
- Entonces tienes que crear las credenciales
OBSOLETO
Tuve el mismo problema ... luego me di cuenta de que también tenía que agregar Google Cloud Messaging para Android .
- Vaya a https://cloud.google.com/console/project
- Haga clic en su proyecto
- Ir a API y autenticación en el panel izquierdo
- Seleccione las API en el submenú en el panel izquierdo
- Buscar Google Cloud Messaging para Android (o / y Chrome) y ponerlo en ON
Espero que te ayude!
Si recientemente ha intentado crear un nuevo proyecto en GCM y agregar una clave de servidor, no tendrá éxito en la autorización de todos modos porque Google dejó de autorizar las claves del servidor recién creadas para promocionar la Mensajería en la nube de Firebase. Actualmente, la única opción para crear una nueva clave es migrar primero el proyecto existente a Firebase aquí .
El problema está relacionado con la autorización, pero me encontré con este error mientras intentaba hacer las cosas a la antigua. Sé que esta es una pregunta antigua, pero permítanme poner mis 50 centavos en ella. Primero hay un chico nuevo en la ciudad llamado "Firebase Cloud Messaging FCM". Permítame citar google:
FCM es la nueva versión de GCM bajo la marca Firebase. Hereda la infraestructura central de GCM, con nuevos SDK para facilitar el desarrollo de Cloud Messaging.
Las ventajas de actualizar a FCM SDK incluyen:
Desarrollo de cliente más simple. Ya no tiene que escribir su propia lógica de reintento de registro o suscripción. Una solución de notificación lista para usar. Puede usar Firebase Notifications, una solución de notificaciones sin servidor con una consola web que permite que cualquiera envíe notificaciones a audiencias específicas según las estadísticas de Firebase Analytics. Más información sobre la configuración de FCM para el estudio Android
Espero que esto ayude a alguien que está tratando de hacer las cosas de la vieja manera
si el error 401: el GCM debe importarse en FCM para funcionar, entonces las ID del servidor y del remitente se pueden encontrar en https://console.firebase.google.com/project/my_projectID/settings/cloudmessaging
Resolví este error usando la clave del servidor en lugar de la clave API. Puede obtener la Clave del servidor de Firebase Console haciendo clic en el engranaje y haciendo clic en Configuración del proyecto; luego, vaya a la pestaña que dice Mensajería en la nube y obtenga la clave del servidor, tanto la clave del servidor normal como la clave del servidor heredado funcionarán.
Esto funciona tanto en Firebase como en GCM, por lo que no es necesario declarar dos claves por separado.