单个设备突然停止从我的服务器接收 C2DM 推送
Posted
技术标签:
【中文标题】单个设备突然停止从我的服务器接收 C2DM 推送【英文标题】:Single device suddenly stopped getting C2DM pushes from my server 【发布时间】:2012-04-18 09:26:45 【问题描述】:我们有一个工作应用和服务器,它使用 C2DM 将消息推送到 android 设备。
两天前,我们的一台测试设备停止接收来自服务器的推送。
服务器发送到的 deviceRegistrationId 似乎已更新且正确,设备具有网络连接,并且使用 Gtalk 等 C2DM 的谷歌应用程序在其上正常工作。
服务器从 Google 的 C2DM 服务器获得成功响应,正确响应为“id=0:133467...61+ac67f...66
”
在此之前设备已正确接受推送。
我们的应用已投放市场,每天都有很多用户使用,我们还没有收到任何类似的用户投诉(这并不意味着我们的某些用户不会遇到这种情况)
有什么想法可以进一步检查以了解这一点吗?
有没有办法使用从 C2DM 服务器收到的 id 来检查特定消息发生了什么?
谢谢。
【问题讨论】:
【参考方案1】:我不知道有任何报告可以跟踪消息。
我要检查的第一件事是,您要向其发送消息的注册 ID 仍然是设备正在使用的注册 ID - 如果它们不匹配,可能会导致您看到的内容。
我看到一些设备突然停止接收 C2DM 消息。在我们的例子中,重启设备通常会修复它。
我看到的另一种情况是特定网络上的设备不接收消息(特别是某些 wifi 网络)。
【讨论】:
感谢 Ollie,我检查了保存在我们应用程序首选项中的 deviceRegistrationId,它与服务器发送到的相同。重启设备也没有用。设备使用的网络没有变化,我们已经在几个不同的 WiFi 网络上进行了尝试(设备没有 3G 计划) 为了排除它,我会尝试将该设备接入 3G 网络。我们到了一个地步,我们总是在 wifi 和 3G 上进行测试,而一些 beta 测试人员 wifi 网络 C2DM 消息从未到达 - 这提醒了应用程序有一个 C2DM 失败的备份策略是多么重要(例如慢轮询)跨度> 我会尝试的其他方法是在设备上请求另一个注册 ID。它可能无济于事,但它排除了这个问题。 我故意不想重新注册设备,直到我们弄清楚这一点,因为用户将无法做到这一点。 +1 关于 3G 建议,我们会尝试,但我们没有 3g 计划的用户可能会遇到这些问题,这听起来不太好 3g 没有解决这个问题......我们可以尝试解决这个问题的任何其他想法吗?我开始考虑让每台设备都向服务器请求 ping,如果一个小时内没有到达,请重新注册...我真的很想避免在我的服务器和用户的设备上出现这种过载.【参考方案2】:身份验证密钥会在 C2DM 服务器上频繁更改每次都获取密钥?
【讨论】:
感谢 Bhaskar,但我们的服务器能够处理密钥更改,服务器部分工作正常,它能够将消息推送到我们的设备。问题在于设备上的 deviceRegistrationId 以某种方式未刷新。我们的客户端也能够接受来自 C2DM 的新 onRegistered 调用以刷新到 deviceRegistrationId,但我们在此设备上没有收到任何消息。 auth key 不会经常变化。它实际上很少更改,尽管许多目前正在到期。【参考方案3】:Google 正在更改其客户端登录过期政策。 他们正在新标头中发送数据以更新我想要的注册,您需要更改代码才能使其正常工作。
详情如下:http://android-developers.blogspot.com/2012/04/android-c2dm-client-login-key.html?m=1
【讨论】:
感谢机器,客户端登录过期仅在服务器端,我们的服务器在获取 Update-Client-Auth 标头时正确更新客户端登录。我们的问题出在客户端,可能是 deviceRegistrationID。以上是关于单个设备突然停止从我的服务器接收 C2DM 推送的主要内容,如果未能解决你的问题,请参考以下文章