即使我的服务器和浏览器应用程序的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)
我可以知道原因和解决方案吗?
答案 0 :(得分:7)
以下是使用GCM时401错误的可能原因:
您尝试用来发送邮件的发件人帐户无法通过身份验证。可能的原因是:
检查您在Authorization标头内发送的令牌是否是与您的项目关联的正确API密钥。
来源:https://developers.google.com/cloud-messaging/http-server-ref#error-codes
答案 1 :(得分:0)
在我的情况下,问题是我在数据存储区中设置正确的API密钥后忘记重新部署。
答案 2 :(得分:0)
请按照下面的说明进行操作,它可以为您提供帮助。
更新:似乎从GCM迁移到FCM 修复了401 Unauthorized Error的问题。
如果您刚刚开始使用GCM,而不是在Google Developers Console中创建项目,请在Firebase控制台中执行此操作。创建项目后,只需使用自动生成的服务器密钥。以下是查找服务器密钥的步骤:
对于旧版GCM 项目,您只需将项目导入Firebase控制台: