当前位置: 首页 > 知识库问答 >
问题:

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

仲孙翔飞
2023-03-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 key有什么限制吗?或者是GCM服务器阻止通知/GCM服务器使Android API密钥无效,如果通知消息超过每天的限制?

共有1个答案

徐知
2023-03-14

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

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

更新:现在在GCM文档中有一个可见的注释说:

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

更新:从GCM迁移到FCM似乎也解决了401未经授权错误的问题。

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

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

对于旧的 GCM 项目,您只需将项目导入到 Firebase 控制台:

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

出于某种原因,现在只有服务器密钥适用于GCM。Android密钥并不是唯一无效的密钥,所有其他客户端应用编程接口密钥(浏览器、iOS、Android)都是无效的。

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

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

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

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

更新:在 GCM 文档中,现在指明了服务器密钥。

默认情况下,在完成配置您的API项目步骤后,会生成一个服务器API密匙(我通过选择Android app对其进行了测试)。firebase-cloud-messaging也是如此。每当我创建一个新项目时,它都会自动生成一个服务器密钥。

希望将来能解释原因。

接下来将添加有关如何创建服务器密钥的步骤。以防万一其他人感到困惑,或者新手不知道该怎么做。

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

---开发人员控制台中的更新在此处减少了步骤---

届时服务器密钥应可用。

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

更新:创建无限制的API密钥时,它会显示一个通知(感叹号),提示您的API密钥易受攻击,这就是为什么强烈建议您为API密钥添加限制。一篇文章有这个问题,添加限制能够解决这个问题。

 类似资料:
  • 当我的后端服务器向GCM服务器发送post请求时,我得到一个授权错误HTTP 401。 我按照这里描述的步骤: http://developer.android.com/google/gcm/http.html#auth_error 我明白了: 在故障排除中它说: 我对此有疑问: curl请求中的头是否正确 它们是指“api_key”(AIzaSy…)还是项目编号,如8305134 如何将我的服务

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 问题内容: 我正在使用GCM服务从服务器推送信息。如果我使用浏览器密钥,它将成功消息显示为: {“ multicast_id”:4849013215736515938,“ success”:1,“ failure”:0,“ canonical_ids”:0,“ results”:[{“ message_id”:“ 0: 1348742583011905%2adac3a0f9fd7ecd“}]},

  • 我试图测试Firebase Cloud messaging APIs,因为控制台没有提供所有功能(特别是当应用程序在后台时定制通知)。但由于某些原因,我无法让它工作,它总是显示401错误。我调查了出现这种情况的原因,并在重新生成新的服务器密钥后进行了尝试,但错误仍然存在。令人惊讶的是,当我生成一个新的服务器密钥时,它没有反映在Firebase控制台中,它将服务器密钥显示为空。此外,我尝试添加我的I

  • 以下是收到的错误消息: “ErrorMessage”:“401未经授权:[{\r\n\”错误“:{\r\n \”代码\“:\”invalidauthenticationToken\“,\r\n\”消息\“:\”访问令牌验证失败。\“,\r\n\”innererror\“:{\r\n \”日期\“:”2020-06-12T11:49:22\“,\r\n\”请求-id\“:”7988BD2E-3274

  • 我是Spring boot和Spring Security的新手,出现以下错误: “错误401未经授权(c.e.l.security.jwt.AuthEntryPointJwt:未经授权的错误:访问此资源需要完全身份验证)” 我试过这个认证 我的问题是,当我成功登录时,我想请求获取用户列表。我发送的请求是一个安全GET请求,它是http://localhost:8084/loginsystem/a