提问人:Jake Braun 提问时间:4/2/2014 最后编辑:Jake Braun 更新时间:11/30/2015 访问量:1816
间歇性 401 未经 Google GCM 授权
Intermittent 401 Unauthorized from Google GCM
问:
我们从 Google 的 GCM 服务收到间歇性 401 未经授权错误。过去,它 100% 有效。该问题可能与我们的路由器接受 IPv6 流量相吻合,但即使我们在适配器上禁用 IPv6,问题仍然存在。它也不适用于单独的仅 IPv4 网络。我们还使用 Google 建议的指数退避 (http://developer.android.com/google/gcm/adv.html#retry) 重试请求,因此问题可能随着时间的推移而发展,我们可能没有注意到。
我们测试过的所有生产 IPv4 和 IPv6 地址都列在我们的项目中,网址为: https://console.developers.google.com
这是我们的密钥的样子,我们已经列出了整个可公开访问的子网进行测试,但我也尝试过只使用单个 IP 地址。
有时它会起作用:
C:\Users\Administrator>curl --header "Authorization: key=REDACTED" --header Content-Type:"application/json" https://android.googl
eapis.com/gcm/send -d "{\"registration_ids\":[\"test\"],\"data\":{\"code\":123}
}" -k
{"multicast_id":REDACTED,"success":0,"failure":1,"canonical_ids":0,"r
esults":[{"error":"InvalidRegistration"}]}
但是,有时我们会得到这样的回应:
C:\Users\Administrator>curl --header "Authorization: key=REDACTED" --header Content-Type:"application/json" https://android.googl
eapis.com/gcm/send -d "{\"registration_ids\":[\"test\"],\"data\":{\"code\":123}
}" -k
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
次要更新(2014 年 4 月 10 日)
将设置更改为“允许的任何 IP”可以解决问题,但更改为任何其他 IP 地址或地址会再次中断该问题。
答:
0赞
Jiju Induchoodan
11/30/2015
#1
通过将 IP 地址字段留空来重新生成服务器密钥,解决了该问题。
评论
1赞
Jake Braun
12/1/2015
不提供 IP 地址确实“解决了”问题,我将其添加到问题中。但是,我们的目标是使用 Google 在其文档中建议的 IP 地址限制,“......为防止配额被盗,请限制密钥,以便仅允许来自服务器源 IP 地址的请求。请参见:开发人员控制台 - API 密钥
评论