La clave API para GCM de repente no es válida? Error no autorizado (401)

Creé una clave API de Android para notificaciones automáticas GCM para mi aplicación Android. Desde los últimos dos días, el servidor GCM devuelve una respuesta no autorizada (401) en PHP.

¿Hay algún motivo para que la clave de la API de Android no sea válida o caduque? ¿O la API de Android está obsoleta por GCM?

Todavía no recibo una explicación adecuada con respecto a ¿Por qué la clave de la API de Android no es válida? La mayoría de ellos prefieren la clave de Servidor en lugar de la API de Android para GCM, pero no mencionan por qué no usan la clave de la API de Android.

¿Por qué no usar la clave de la API de Android en GCM? ¿Hay alguna limitación para la clave API de Android? ¿O el servidor GCM bloquea la notificación / el servidor GCM está haciendo que la clave API de Android no sea válida si el mensaje de notificación excede el límite por día?

Actualización : el término que se usa vuelve a Clave del servidor .

Recientemente, ahora se está implementando un Token de mensajería en la nube de Firebase (Token FCM). Esto es visible en la pestaña de Cloud Messaging en su Firebase Console.


Actualización : ahora hay una nota visible en los documentos de GCM que dice:

A partir de septiembre de 2016, la nueva clave de servidor solo se puede crear en la consola de Firebase utilizando la pestaña Mensajería en la nube del panel de Configuración. Los proyectos existentes que necesitan crear una nueva clave de servidor se pueden importar en la consola de Firebase sin afectar su configuración existente.


Actualización : también parece que la migración de GCM a FCM corrige 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. Accede a tu consola de Firebase y haz clic en CREAR NUEVO PROYECTO .
  2. Complete su nombre de 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 Configuración del proyecto .
  4. Luego, vaya a la pestaña Cloud-Messaging .

Para proyectos antiguos de GCM , simplemente puede Importar el proyecto a la consola de Firebase:

  1. Vaya a la consola de Firebase y haga clic en IMPORT PROJECT .
  2. Seleccione el proyecto que desea importar y su país.
  3. Haga clic en ADD 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 Configuración del proyecto .
  5. Luego, vaya a la pestaña Cloud-Messaging .

Por alguna razón, solo una clave de servidor funciona ahora con GCM. La clave de Android no es la única que parece no válida, todas las demás claves de la API del cliente (navegador, iOS, Android) sí lo son.


Cuando se refiere a la descripción de la clave del servidor :

Cree y use una clave de Servidor si su aplicación se ejecuta en un servidor.

Es lógico usar una clave de Servidor ya que está usando la clave API en su Servidor, y está trabajando con el servidor de Conexión de GCM.

Si compara los documentos de FCM con los documentos de GCM (en Credenciales ), puede ver que en GCM solo indica la clave de API, mientras que en FCM ya especifica una clave de Servidor. Bueno, FCM es la versión más nueva de GCM, ¿puede tener algo que ver con eso? No estoy tan seguro, pero creo que entiendes lo que estoy diciendo.

Actualización : en los documentos de GCM, ahora se indica la clave del servidor.


De forma predeterminada, después de pasar por los pasos de Configurar su proyecto API , se genera una clave API del servidor (la probé seleccionando la aplicación Android). Lo mismo ocurre con firebase-cloud-messaging . Cada vez que creo un nuevo proyecto, solo genera una clave de servidor automáticamente.

Esperemos que haya una explicación en el futuro de por qué.


Voy a seguir adelante y agregar los pasos sobre cómo crear una clave de servidor. En caso de que otros estén confundidos, o los novatos no están seguros de cómo.

  1. Vaya a su Google Developers Console
  2. En el panel izquierdo, haga clic en Credenciales
  3. En la pestaña Credenciales, haga clic en Crear credenciales
  4. Seleccionar clave de API

— La actualización en Developers Console corta el paso aquí

  1. Seleccionar clave de servidor
  2. Completa los detalles.
  3. Haga clic en Crear

La clave del servidor debería estar disponible para entonces.


Actualización : Parece que hubo un cambio reciente al generar una clave API. Es lo mismo hasta el Paso 4 que mencioné anteriormente. Sin embargo, después de seleccionar la Clave de API, creará directamente una clave de API sin preguntar qué tipo de clave (Servidor, Android, Navegador, iOS) es. Solo le permitirá establecer algunas Restricciones visibles según la Clave de API que desee generar.


Actualización : al crear una clave de API sin restricciones, muestra un aviso (punto de exclamación) de que su clave de API es vulnerable, por eso es muy recomendable que agregue una restricción para su clave de API. Una publicación tuvo este problema y al agregar una restricción fue capaz de resolverla.

esto puede ser extraño para ti, pero esto es lo que me solucionó

en mi backend, … este produjo el error …

 $Key = 'someKey'; 

este resolvió el error ..

 $Key = "someKey";