Android上持久移动连接的最佳实践?

6
我在考虑从Android应用程序向“云服务”使用持久连接。这将在后台运行所有时间(或类似于此的东西)。我考虑使用WebSockets或XMPP来保持连接,基本上是寻找一个轻量级连接,不会耗尽电池。我希望能够实时推送通知到这个连接中,因此不需要定期轮询。我知道C2DM和其他商业解决方案,但我想自己实现。这就是为什么我正在调查WebSockets(或其他轻量级连接)的原因。所以如果我选择这条路线,有哪些最佳实践应该注意呢?
我考虑以下内容:
1. 如何防止电池耗尽 2. 如何处理IP地址更改等问题?

1
值得阅读的Android文档:http://developer.android.com/training/efficient-downloads/index.html - pawelzieba
4
您需要将此内容拆分为独立的Android和iOS问题 - 两者完全不同(在iOS上,您不能简单地拥有一个后台服务)。 - Gruntcakes
@MartinH 问题已更新,仅涉及Android。 - Paul Fryer
2个回答

10

这可能不是你想要的答案,但我认为你需要重新考虑你的架构。

移动平台可能会出现以下情况:

  • 您的IP地址会随机更改
  • 您的物理互联网连接会随机丢失
  • 操作系统可能会认为您没有做任何有用的事情并杀死您的进程
  • 连接类型会随机更改(从WIFI到4G到3G到edge),从而导致您的IP地址更改

基本上,你的应用程序需要能够处理连接丢失的情况,因为几乎肯定会发生。

话虽如此,根据你对实时的定义,完全可以做到。如果你愿意不断检查是否仍然存在可行的连接,你可以将延迟时间保持在几分钟的范围内。但这会耗尽电池, 对此你无能为力。


4
重新思考建筑不是一个坏的答案 :-) 这也是发帖问题的全部意图,只是想与他人核实这个想法。如果这只是一个糟糕的想法,那么这是很好的反馈。谢谢。然而,如果有人想要尝试,我仍然对最佳实践感兴趣。C2DM就做到了这一点,所以问题是:他们是如何做到的,他们的最佳实践是什么?上述评论是需要注意的有用信息。 - Paul Fryer

1

有些东西就是不太搭配。那就是“实时推送通知”和“防止电池耗尽”。在这里,你必须做出妥协。

我只能建议尝试一些使用XMPP的Android应用程序,以了解它们如何处理持久连接、IP地址更改和电池消耗。如果它们是开源的,您还可以查看代码并从中学习。其中一些应用包括Yaxim、Project MAXS和Beem。也许您还应该查看一下XEP-0286:移动设备上的XMPP

话虽如此,您确定要重新发明轮子吗?Google为您提供了C2DM,这是针对此用例进行优化的。我认为它会有一些延迟,所以它不是真正的“实时”。但是再次强调,无论如何,您要么最终得到一个试图积极建立持久连接并耗尽电池的解决方案,要么就必须接受某种延迟(约0-30分钟)。


移动设备上关于XMPP的好链接。文档中概述了一些良好的设计模式,例如压缩,如果必须发送,则发送您拥有的所有内容,因为此时功率级别将被提升等等。 - Paul Fryer
3
我考虑寻找替代Google C2DM的原因是因为C2DM要求用户在设备上拥有Google账号。我正在设计一个推送功能,将作为产品销售给银行。需要向他们解释他们的用户需要拥有Google账号会是一次尴尬的谈话。 - Paul Fryer
1
我知道这是一个老问题,但是GCM开关的规则已经有所改变。新设备不再需要Google帐户。 "它使用现有的Google服务连接。对于3.0之前的设备,这需要用户在移动设备上设置他们的Google帐户。在运行Android 4.0.4或更高版本的设备上,不需要Google帐户。" - http://developer.android.com/google/gcm/gcm.html - ian.shaun.thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接