间歇性401未经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   Unauthorized   

Unauthorized

Error 401

次要更新(2014年4月4日)

将设置更改为“允许任何IP”可以解决问题,但更改为任何其他IP地址会再次破坏它。

    通过将IP地址字段留空来重新生成服务器密钥解决了问题。