我已经构建了一个功能正常的 C2DM 应用程序,通常它运行得很好,并且推送消息到达得很快。然而,我发现当我第一次启动应用程序或将其重新聚焦时,消息经常不会到达。
它们肯定发送成功(我收到 200 响应),并且消息格式肯定是正确的(稍后发送相同的消息效果很好)。故障可能会持续几分钟,然后突然再次开始工作,并在此后持续工作。
然而,即使在它开始工作之后,较旧的消息显然已经消失并且从未到达。消息肯定没有到达 - 我有大量的日志记录,突出显示任何到达的 C2DM 消息。
我完全清楚 C2DM 永远不会保证交付,因此我预计某些消息会失败,但根据我的经验,在某些情况下,它就是行不通。我显然想了解这是否是我在我的应用程序或 C2DM 服务本身中做错的事情。
哪些原因会导致C2DM消息传递失败?
如果消息无法传递,为什么 C2DM 服务器不从其队列中再次尝试?
相关 - 我应该仅在应用程序第一次启动时获取新的注册 ID,还是每次应用程序启动时刷新它?我目前执行后者(在应用程序中,而不是活动中)。
我意识到我犯了一个小学生的错误。每次应用程序启动时,我都会重新注册 C2DM。该过程有时需要相当长的时间,在此期间应用程序将不会收到发送到旧注册 ID 的推送消息。这就解释了为什么推送消息在启动应用程序后特别容易无法立即收到。
解决方案是确保仅当应用程序还没有注册 ID 时才请求注册 ID。推送消息现在工作得更加可靠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)