我正在尝试对是否可以接收 C2DM 消息进行最佳猜测。
我创建了一个应用程序,它依赖于在物理上无法访问的情况下将信息推送到手机。我知道 C2DM 不能保证传送,但我至少想知道何时可以传送消息;如果不是,我们就会退回到我们自己的推送服务(并且实际上可以知道我们何时连接)。
我注意到即使没有登录谷歌帐户,Android 上的 C2DM 仍然会发出身份验证令牌;在这种情况下,消息似乎仍然被传递,尽管声明不应该传递。如果 GTalk 未连接(防火墙或其他原因),则在请求身份验证令牌时根本不会返回任何响应。当手机处于飞行模式时,身份验证令牌将返回到应用程序。这意味着它并不像检查互联网是否可用那么简单。我找不到可靠的方法来检查 GTalk 是否已登录。
再说一遍,我不需要保证消息的传递,但我至少想知道传递是否均匀possible。有人有有趣的解决方案吗?
去看这个视频 http://www.youtube.com/watch?v=PLM4LajwDVc,这是一次关于 C2DM、如何使用它以及它如何工作的 Google I/O 演讲。 AFAIK,你无法知道它是否已连接。可能大多数时候他们甚至不知道(直到他们必须传递消息并失败)。
但是,强烈建议(也在视频中)不要通过 C2DM 发送重要数据(因为消息可能会丢失)。该服务只能用作“网络小工具”(占用空间尽可能小)。您的应用程序应该被这个痒痒唤醒,并且它应该开始获取它需要的信息itself.
现在,如果你这样实现的话,应该很容易实现轮询机制。由于您已经将“痒痒”与实际的信息检索分开,因此如果没有痒痒,您可以每隔一段时间触发一次检索。
您可以使用 ping 之类的方法来检查 C2DM 是否已连接:
- 通过 C2DM 向手机发送消息
- 应用程序接收(或未接收)消息并将“pong”发送回您的服务器
- 服务器在将设备标记为“离线”之前等待“乒乓”预定的时间(我想说 1-2 分钟)。
Edit:依靠 GTalk 是不可行的。 GTalk 就像您的应用程序一样依赖于 C2DM,它没有任何“额外”的东西。此外,GTalk 并不存在于所有设备上。我不确定 GTalk 应用程序如何确定它是否离线(不幸的是,它不是开源的),但我猜它只是尝试 ping 服务器并失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)