Google GCM中的HTTP响应代码401

即使我的服务器和浏览器应用程序的API密钥有效,下面是我得到的例外。 我用curl检查了一下。 我以UTF-8和JSON格式发送GCM请求。 从外部企业网络进行测试。

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) 

我可以知道原因和解决方案吗?

以下是使用GCM时401错误的可能原因:

您尝试用于发送邮件的发件人帐户无法通过身份validation。 可能的原因是:

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

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

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

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

请按照下面的说明进行操作,它可以帮助您。

更新:似乎从GCM迁移到FCM修复了401 Unauthorized Error的问题。

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

  1. 转到Firebase控制台,然后单击“创建新项目”。
  2. 填写您想要的项目名称并选择您的国家/地区。 在此之后,新项目应该是活跃的。
  3. 然后在左侧面板上,单击齿轮按钮并选择“项目设置”。
  4. 然后转到Cloud-Messaging选项卡。

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

  1. 转到Firebase控制台,然后单击IMPORT PROJECT。
  2. 选择要导入的项目和您所在的国家/地区。
  3. 单击ADD FIREBASE。 在此之后,新项目应该是活跃的。
  4. 然后在左侧面板上,单击齿轮按钮并选择“项目设置”。
  5. 然后转到Cloud-Messaging选项卡。