我们正在从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 :(得分:0)
通过将IP地址字段留空来重新生成服务器密钥解决了问题。