10

下面是我得到的异常,即使我的服务器和浏览器应用程序的 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)

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

4

3 回答 3

7

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

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

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

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

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

于 2012-08-10T14:33:32.723 回答
0

就我而言,问题是我在数据存储中设置正确的 API 密钥后忘记重新部署。

于 2012-10-05T12:03:36.447 回答
0

请按照以下说明进行操作,这可能会对您有所帮助。

更新:从 GCM 迁移到 FCM似乎也解决了 401 Unauthorized Error 的问题。

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

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

对于旧的 GCM项目,您可以简单地将项目导入 Firebase 控制台:

  1. 转到您的 Firebase 控制台并单击导入项目。
  2. 选择您要导入的项目和您的国家。
  3. 单击添加 FIREBASE。在此之后,新项目应该处于活动状态。
  4. 然后在左侧面板上,单击齿轮按钮并选择项目设置。
  5. 然后转到云消息选项卡。
于 2017-07-11T11:49:50.847 回答