Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么安卓C2DM推送消息并不总是到达?_Android_Android C2dm - Fatal编程技术网

Android 为什么安卓C2DM推送消息并不总是到达?

Android 为什么安卓C2DM推送消息并不总是到达?,android,android-c2dm,Android,Android C2dm,我已经建立了一个功能正常的C2DM应用程序,它通常工作得很好,推送消息到达得很快。然而,我发现,当我第一次启动应用程序或让它恢复焦点时,信息通常不会到达 它们肯定发送成功(我得到200个响应),消息格式肯定正确(稍后发送相同的消息很好)。故障可能持续几分钟,然后突然又开始工作,并在此后持续工作 然而,即使在它开始工作后,旧的消息显然已经消失,永远不会到达。消息肯定没有到达-我有大量日志,突出显示任何到达的C2DM消息 我完全知道C2DM永远不会保证交付,所以我预计一些消息会失败,但根据我的经验,

我已经建立了一个功能正常的C2DM应用程序,它通常工作得很好,推送消息到达得很快。然而,我发现,当我第一次启动应用程序或让它恢复焦点时,信息通常不会到达

它们肯定发送成功(我得到200个响应),消息格式肯定正确(稍后发送相同的消息很好)。故障可能持续几分钟,然后突然又开始工作,并在此后持续工作

然而,即使在它开始工作后,旧的消息显然已经消失,永远不会到达。消息肯定没有到达-我有大量日志,突出显示任何到达的C2DM消息

我完全知道C2DM永远不会保证交付,所以我预计一些消息会失败,但根据我的经验,在某些情况下,它根本不起作用。很明显,我想了解我的应用程序或C2DM服务本身是否存在错误

是什么导致C2DM无法传递消息? 如果无法传递消息,为什么C2DM服务器不从其队列中重试?
相关-我应该仅在应用程序第一次启动时获取新的注册ID,还是在每次启动应用程序时刷新它?我目前正在做后者(在应用程序中,而不是在活动中)。

这很可能是正确的行为。消息根本不能保证被传递。更不用说马上了


最有可能的情况是,你的手机和谷歌服务器之间的连接正在中断,需要一段时间才能恢复。

我意识到我犯了一个小学生的错误。每次应用程序启动时,我都会重新注册C2DM。该过程有时需要几秒钟,在此期间,应用程序将不会收到发送到旧注册ID的推送消息。这解释了为什么启动应用程序后推送消息很可能无法立即收到


解决方案是确保只有在应用程序还没有注册ID时才请求注册ID。推送消息现在工作更加可靠。

我的应用程序也有同样的问题。我的用户经常问我为什么会发生这种情况。。。所以我对答案很感兴趣。也许谷歌C2DM团队的某个人可以回答这个问题。也许你应该问一下官方邮件列表——如果你得到了答案,就把它贴在这里;)我不相信这是问题所在。它经常发生在应用程序启动时,即使网络连接良好,并且其他推送消息(例如应用程序更新)工作正常,表明存在打开的连接,但消息未被发送。C2DM被记录为排队消息和重试,那么它们要去哪里呢?我怀疑C2DM注册的一个问题是黑洞问题。我自己(还)没有注意到这个问题,但是通过阅读你的答案,我意识到我犯了同样的学生错误。所以这很有帮助:-)我犯了同样的错误。但现在我的问题是。。。我在启动时执行了注册,以查看注册ID是否已更改。如果我不做这个检查,我怎么知道注册号什么时候不同?有时我必须检查一下,你觉得怎么样?@kinghomer-开始一个新问题,以获得对你问题的帮助