Google GCM中的HTTP响应代码401

cha*_*ako 10 java google-cloud-messaging

下面是我得到的例外,即使我的服务器和浏览器应用程序的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)
Run Code Online (Sandbox Code Playgroud)

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

azg*_*fer 7

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

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

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

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

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

  • 让我感到困惑的是,Google要求您在"授权"标题中使用"key ="作为API密钥的前缀.这对我来说没有任何意义(它已经在标题字段中;'key ='是多余的),但是一旦我加入,问题就解决了. (2认同)