Google GCM中的HTTP响应代码401

问题描述:

即使我的服务器和浏览器应用程序的API密钥有效,以下是我遇到的异常。我用卷曲检查了它。我以格式UTF-8和JSON发送GCM请求。从外部公司网络进行测试。Google GCM中的HTTP响应代码401

java.io.IOException: Server returned HTTP response code: 401 for URL: https://android.googleapis.com/gcm/send 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1345) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1339) 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:993) 
     at java.net.URLConnection.getContent(URLConnection.java:688) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent(HttpsURLConnectionImpl.java:406) 
     at gcm1.MessageUtil.sendMessage(MessageUtil.java:58) 

我可以知道原因和解决办法吗?

你试图用来发送邮件无法进行身份验证发件人帐户:

+0

对于刚才浏览的其他人,如果您突然开始遇到此错误而未做出任何特定更改(服务器密钥)仍然相同,则可能需要将您的项目导入到Firebase。看到我的答案[这里](http://*.com/a/37801206/4625829)。 – 2016-10-25 08:21:27

这里使用GCM时是401错误的可能原因。可能的原因有:

  • 授权标题丢失或语法无效。
  • 作为密钥发送的项目ID无效。
  • 密钥有效,但禁用了GCM服务。
  • 源自服务器密钥IP中未列入白名单的服务器的请求。

检查您在授权标头内发送的令牌是否与您的项目相关的正确API密钥。

来源:https://developers.google.com/cloud-messaging/http-server-ref#error-codes

+0

我使用curl检查了我的API密钥,它的工作正常。它以成功返回响应:1以JSON格式。服务器也在服务器密钥IP中被列入白名单。 – chako 2012-08-13 04:27:33

+2

让我想到的一点是,Google要求你在'Authorization'标题中用'key ='作为你的API密钥的前缀。这对我来说毫无意义(它已经在标题字段中;'key ='是多余的),但是一旦我添加了,问题就解决了。 – aroth 2013-09-09 04:35:13

+0

更新后的链接:https://developers.google.com/cloud-messaging/http-server-ref#error-codes – Jason 2016-02-12 23:28:23

在我的情况下,问题是,我忘了在数据存储中设置正确的API密钥后,重新部署。

请按照以下指示说明它可以帮助你。

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

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

  1. 转到您的Firebase控制台并单击CREATE NEW PROJECT。
  2. 填写您想要的项目名称并选择您的国家。在此之后, 新项目应该是积极的。
  3. 然后在左侧面板上,单击齿轮按钮并选择项目 设置。
  4. 然后转到云消息传递选项卡。

对于老GCM项目,你可以简单地导入项目到火力地堡控制台:

  1. 转到您的火力地堡控制台,然后单击导入项目。
  2. 选择您要导入的项目和您的国家。
  3. 点击ADD FIREBASE。在此之后,新项目应该是活跃的。
  4. 然后在左侧面板上,单击齿轮按钮并选择项目 设置。
  5. 然后转到云消息传递选项卡。