我为我的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控制台中创建。创建项目后,只需使用自动生成的服务器密钥。以下是查找服务器密钥的步骤:
- 转到您的Firebase控制台并单击CREATE NEW PROJECT
- 填写您想要的项目名称并选择您的国家/地区。在此之后,新项目应处于活动状态
- 然后在左侧面板上,单击齿轮按钮并选择项目设置
- 然后转到云消息选项卡
对于旧的GCM项目,您可以简单地将项目导入Firebase控制台:
- 转到Firebase控制台并单击IMPORT PROJECT
- 选择要导入的项目和您所在的国家/地区
- 单击添加FIREBASE。在此之后,新项目应处于活动状态
- 然后在左侧面板上,单击齿轮按钮并选择项目设置
- 然后转到云消息选项卡
由于某些原因,现在只有服务器密钥可以与GCM一起使用。Android密钥并不是唯一一个看起来无效的密钥,所有其他客户端API密钥(浏览器、iOS、Android)都是。
当涉及服务器密钥的描述时:
如果应用程序在服务器上运行,请创建并使用服务器密钥。
使用服务器密钥是合乎逻辑的,因为您在服务器上使用API密钥,并且它与GCM连接服务器一起工作。
如果将FCM文档与GCM文档进行比较(在凭证下),您可以看到,在GCM中,它只声明API密钥,而在FCM中,它已经指定了服务器密钥。嗯,FCM是GCM的新版本,可能与它有关吗?我不太确定,但我想你明白我所说的要点了。
更新:在GCM文档中,现在会显示服务器密钥。
默认情况下,在完成配置API项目步骤后,将生成一个服务器API密钥(我通过选择Android应用程序对其进行测试)。firebase云消息也是如此。每当我创建一个新项目时,它只会自动生成一个服务器密钥。
希望将来能对原因做出解释。
继续并添加有关如何创建服务器密钥的步骤。以防其他人感到困惑,或者新手不确定该怎么做。
- 转到您的谷歌开发者控制台
- 在左侧窗格中,单击凭据
- 在凭据选项卡下,单击创建凭据
- 选择API密钥
---Developers Console中的更新在此截断步骤---
- 选择服务器密钥
- 填写详细信息
- 单击创建
届时服务器密钥应可用。
更新:生成API密钥时似乎最近发生了更改。直到我上面提到的步骤4,它都是一样的。但是,在您选择API密钥后,它将直接创建一个API密钥,而无需询问它是什么类型的密钥(服务器、Android、浏览器、iOS)。它只允许您设置一些限制,这些限制取决于您要生成的API密钥。
更新:创建无限制的API密钥时,会显示一个通知(感叹点),表明您的API密钥易受攻击,这就是为什么强烈建议为您的API密钥添加限制的原因。一个帖子有这个问题,添加一个限制就可以解决它