GCM的API密钥突然无效?未经授权的(401)错误



我为我的Android应用程序创建了一个用于GCM推送通知的Android API密钥。从最近两天开始,GCM服务器用PHP返回Unauthorized(401)响应。

Android API密钥无效/过期有任何原因吗?还是安卓API密钥被GCM弃用?

我仍然没有得到关于为什么Android API密钥无效的正确解释?他们中的大多数人更喜欢服务器密钥而不是Android API密钥,但没有提到为什么不使用Android API密钥。

为什么不在GCM中使用Android API密钥?Android API密钥是否有任何限制?或者,如果通知消息超过每日限制,GCM服务器是否阻止通知/GCM服务器使Android API密钥无效?

更新:使用的术语返回到服务器密钥

就在最近,有一个Firebase云消息令牌(FCM令牌)正在推出。这在Firebase控制台的"云消息"选项卡中可见


更新:现在GCM文档中有一个可见的注释,上面写着:

从2016年9月开始,只能使用"设置"面板的"云消息"选项卡在Firebase控制台中创建新的服务器密钥。需要创建新服务器密钥的现有项目可以在Firebase控制台中导入,而不会影响其现有配置。


更新从GCM迁移到FCM似乎也修复了401未授权错误的问题。

如果您刚开始使用GCM,请在Firebase控制台中创建项目,而不是在Google Developers控制台中创建。创建项目后,只需使用自动生成的服务器密钥。以下是查找服务器密钥的步骤:

  1. 转到您的Firebase控制台并单击CREATE NEW PROJECT
  2. 填写您想要的项目名称并选择您的国家/地区。在此之后,新项目应处于活动状态
  3. 然后在左侧面板上,单击齿轮按钮并选择项目设置
  4. 然后转到云消息选项卡

对于旧的GCM项目,您可以简单地将项目导入Firebase控制台:

  1. 转到Firebase控制台并单击IMPORT PROJECT
  2. 选择要导入的项目和您所在的国家/地区
  3. 单击添加FIREBASE。在此之后,新项目应处于活动状态
  4. 然后在左侧面板上,单击齿轮按钮并选择项目设置
  5. 然后转到云消息选项卡

由于某些原因,现在只有服务器密钥可以与GCM一起使用。Android密钥并不是唯一一个看起来无效的密钥,所有其他客户端API密钥(浏览器、iOS、Android)都是。


当涉及服务器密钥的描述时:

如果应用程序在服务器上运行,请创建并使用服务器密钥。

使用服务器密钥是合乎逻辑的,因为您在服务器上使用API密钥,并且它与GCM连接服务器一起工作。

如果将FCM文档与GCM文档进行比较(在凭证下),您可以看到,在GCM中,它只声明API密钥,而在FCM中,它已经指定了服务器密钥。嗯,FCM是GCM的新版本,可能与它有关吗?我不太确定,但我想你明白我所说的要点了。

更新:在GCM文档中,现在会显示服务器密钥。


默认情况下,在完成配置API项目步骤后,将生成一个服务器API密钥(我通过选择Android应用程序对其进行测试)。firebase云消息也是如此。每当我创建一个新项目时,它只会自动生成一个服务器密钥。

希望将来能对原因做出解释。


继续并添加有关如何创建服务器密钥的步骤。以防其他人感到困惑,或者新手不确定该怎么做。

  1. 转到您的谷歌开发者控制台
  2. 在左侧窗格中,单击凭据
  3. 在凭据选项卡下,单击创建凭据
  4. 选择API密钥

---Developers Console中的更新在此截断步骤---

  1. 选择服务器密钥
  2. 填写详细信息
  3. 单击创建

届时服务器密钥应可用。


更新:生成API密钥时似乎最近发生了更改。直到我上面提到的步骤4,它都是一样的。但是,在您选择API密钥后,它将直接创建一个API密钥,而无需询问它是什么类型的密钥(服务器、Android、浏览器、iOS)。它只允许您设置一些限制,这些限制取决于您要生成的API密钥。


更新:创建无限制的API密钥时,会显示一个通知(感叹点),表明您的API密钥易受攻击,这就是为什么强烈建议为您的API密钥添加限制的原因。一个帖子有这个问题,添加一个限制就可以解决它

最新更新