GCM 的 API 密钥突然失效?未经授权的 (401) 错误
Posted
技术标签:
【中文标题】GCM 的 API 密钥突然失效?未经授权的 (401) 错误【英文标题】:API key for GCM is suddenly invalid? Unauthorized (401) error 【发布时间】:2016-10-13 20:14:14 【问题描述】:我为我的 android 应用程序创建了一个用于 GCM 推送通知的 Android API 密钥。从过去两天开始,GCM 服务器在 php 中返回未经授权的 (401) 响应。
Android API 密钥无效/过期有什么原因吗?还是 GCM 已弃用 Android API 密钥?
我仍然没有得到关于为什么 Android API 密钥无效的正确解释?他们中的大多数人更喜欢服务器密钥而不是 GCM 的 Android API 密钥,但没有提及为什么不使用 Android API 密钥。
为什么不在 GCM 中使用 Android API Key? Android API 密钥有什么限制吗?或者如果通知消息超过每日限制,GCM 服务器是否会阻止通知/GCM 服务器使 Android API 密钥无效?
【问题讨论】:
您是否在 PHP 脚本中更新了必要的凭据?您是否在 Google 开发者控制台中包含了您的软件包名称? @kumar 我更新了我的答案。看看这个。如果您正在寻找官方原因,似乎还没有透露任何内容。 嗨@kumar,我今天的应用程序也遇到了类似的问题。它自 2 年以来一直运行良好,但突然从星期五开始,我开始收到相同的 401 未经授权的错误。也尝试过重新生成服务器密钥,但没有成功。你解决了吗? 您只需删除该服务器密钥并创建新的服务器密钥。现在试试吧 【参考方案1】:更新:使用的术语回到服务器密钥。
就在最近,现在推出了一个 Firebase 云消息传递令牌(FCM 令牌)。这在 Firebase 控制台的“云消息传递”选项卡中可见。
更新:现在GCM docs 中有一条可见的注释:
从 2016 年 9 月开始,只能使用“设置”面板的 Cloud Messaging 标签在 Firebase 控制台中创建新的服务器密钥。现有项目需要新建服务器密钥,可以在Firebase console中导入,不会影响现有配置。
更新:从 GCM 迁移到 FCM 似乎也解决了 401 Unauthorized Error 的问题。
如果您刚刚开始使用 GCM,不要在 Google Developers Console 中创建项目,而是在 Firebase 控制台中进行。创建项目后,只需使用自动生成的服务器密钥。以下是查找服务器密钥的步骤:
-
转到您的Firebase Console 并点击创建新项目。
填写您想要的项目名称并选择您的国家。在此之后,新项目应该处于活动状态。
然后在左侧面板上,点击齿轮按钮并选择项目设置。
然后转到云消息选项卡。
对于旧的 GCM 项目,您可以简单地将项目导入 Firebase 控制台:
-
转到您的Firebase Console 并点击导入项目。
选择您要导入的项目和您所在的国家/地区。
单击添加 FIREBASE。在此之后,新项目应该处于活动状态。
然后在左侧面板上,点击齿轮按钮并选择项目设置。
然后转到云消息选项卡。
由于某种原因,现在只有服务器密钥可用于 GCM。 Android 密钥并不是唯一一个似乎无效的密钥,所有其他客户端 API 密钥(浏览器、ios、Android)都是。
关于Server Key的描述:
如果您的应用程序在服务器上运行,请创建并使用服务器密钥。
使用服务器密钥是合乎逻辑的,因为您在服务器上使用 API 密钥,并且它与 GCM 连接服务器一起使用。
如果您比较 FCM docs 和 GCM docs(在 Credentials 下),您可以看到在 GCM 中,它只声明 API 密钥,而在 FCM ,它已经指定了一个服务器键。那么,FCM 是 GCM 的较新版本,可能与它有关吗?我不太确定,但我想你明白我在说什么。
更新:在 GCM 文档中,现在指明了服务器密钥。
默认情况下,经过Configure your API Project 步骤后,会生成一个服务器 API 密钥(我通过选择 Android 应用对其进行了测试)。 firebase-cloud-messaging 也是如此。每当我创建一个新项目时,它都会自动生成一个服务器密钥。
希望将来会有一个解释。
继续并添加有关如何创建服务器密钥的步骤。以防其他人感到困惑,或者新手不知道该怎么做。
-
转到您的Google Developers Console
在左侧窗格中,单击 Credentials
在凭据选项卡下,单击 创建凭据
选择 API 密钥
---开发者控制台中的更新减少了这里的步骤---
-
选择 服务器密钥
填写详细信息。
点击创建
届时服务器密钥应该可用。
更新:生成 API 密钥时似乎最近发生了变化。在我上面提到的第 4 步之前都是一样的。但是,选择 API Key 后,它会直接创建一个 API 密钥,而不会询问它是什么类型的密钥(服务器、Android、浏览器、iOS)。它只允许您设置一些可见的限制,具体取决于您要生成的 API 密钥。
更新:在创建无限制的 API 密钥时,它会显示一个通知(感叹号),表明您的 API 密钥易受攻击,这就是为什么它强烈建议供您为您的 API 密钥添加限制。一位post 遇到了这个问题,添加限制可以解决它。
【讨论】:
Server Key
不再是一个选项。所以我选择了no restrictions
,API Key 说无效。
谢谢。我使用 MixPanel 进行推送通知 - 他们的系统不接受新的 no restrictions
键。
其他用户似乎也有这种问题,但谷歌没有答案。 groups.google.com/forum/#!topic/firebase-talk/qjCTWINQMNU
@YuDroid 似乎应该可以。见here。只要它在工作。干杯。 :)
@AL。所以最后我的 Android 应用程序现在可以正常工作而无需进行任何代码更改。我所做的只是将我现有的基于 GCM 的项目导入 FCM(Firebase 云消息传递)。当我检查 FCM 中的项目设置时,它生成了Server Key
。我在我的后端服务器(基于 C#)上上传了这个 Server Key
,我可以发送推送通知。干杯。感谢您的时间和考虑。以上是关于GCM 的 API 密钥突然失效?未经授权的 (401) 错误的主要内容,如果未能解决你的问题,请参考以下文章