iphone - 在移动和 Web 服务器之间同步对象列表的最佳解决方案

标签 iphone android java-me synchronization

我正在寻找使用特定方法、文件格式(例如 syncML)和库(funambol,其他?)在多个移动设备和网络服务器之间同步列表的经验/意见/学习?

我们希望用户能够在多个移动设备和 Web 中编辑列表,并定期同步它们,优雅地处理冲突等......而无需重新发明轮子。

非常感谢 syncML 经验、syncML 库(具有 Apache 样式许可)或其他经验。

我们正在开发:
- 用于服务器的 Java SE(appengine 和其他平台)- 所以 Java Servlet 2.3
- J2ME(在 Symbian 和其他平台上)
- iOS
- 安卓

因此,如果可能的话,希望在这些平台上有一个覆盖面广、库好的解决方案。

数据
列表中的项目将是产品。这可能与用户输入的文本名称一样简单,或者包含许多字段的结构化产品描述。我们已经为此定义了一个 XML 格式,并将对其进行改进。我们的首选是同步这些 XML fragment 的列表。

冲突
我们仍然必须准确定义如何解决冲突,或者用户是否可以选择行为——有点像 ActiveSync 和其他 PC 解决方案。我们不打算在这方面做任何新的事情。

详情
我们希望列表的每个移动“副本”都将数据存储在本地数据存储中,并带有与服务器最后同步的日期和 sinc 更改列表。我们还希望列表中的每个项目都有一个本地 ID 和一个用于在同步期间提供帮助的全局(服务器 ID)。

在线格式
我们更喜欢在同步过程中使用 XML 格式进行数据传输,它有一个或多个列表,每个列表中的项目作为元素,每个元素的 ID 作为元素的属性。

最佳答案

一个可能过于简单的想法是使用与 SVN 或 CVS 相同的方法。

  1. 首先,设备提取数据(结帐)。
  2. 同步后,它会做更新
  3. 如果您有任何冲突,请询问用户喜欢哪个版本(我会提供选择两者之一的选项,创建一个新版本或将它们视为两个不同的项目)
  4. 解决冲突后,提交当前状态

需要考虑的事情:

  1. 每个项目都应该与一个文件匹配(更适合复杂数据)还是所有项目(属于同一用户)都应该放在同一个文件中?
  2. 使用项目的 ID 可以更容易地避免具有相似内容的项目之间的虚假冲突
  3. 您可能应该将交换的任何项目转换为 xml 文件(或类似文件),以便更轻松地跟踪版本
  4. 这并不意味着您需要来回发送 xml。您可以将 xml 转换为您希望的格式(例如,将 url 编码参数转换为 xml)
  5. 对受修订控制的文件使用严格的格式将使事情更容易同步

解释我的最后一点:

不要按照到达的顺序对 url 参数进行编码,而是选择一些逻辑顺序。例如,“a=111&b=222”和“b=222&a=111”应该存储相同的文本。确保相同的数据始终具有相同的表示形式,即使您以不同的格式接收它也是如此。

这些只是我最初的想法......

关于iphone - 在移动和 Web 服务器之间同步对象列表的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672299/

相关文章:

javascript - 创建自定义 block 并编写代码以在 Android 上生成 Javascript 代码

java - 安卓/Java。 AsyncTask/Thread 在我需要时将数据传递回 UI(不仅在执行前/执行后)

java - 如何将我的 J2ME 应用程序放入移动设备中?

memory - 如何在 J2ME/BlackBerry 中深度复制向量?

iphone - 在 iPhone 上使用相机变焦

iphone - 3.5 屏幕上的 View 大小错误

JavaScript 浏览器代理重定向

iphone - 我无法理解iOS6中的旋转机制

android - 如何将 Ormlite 与 LoaderManager 一起使用

java - 使用 Ksoap 解析 Xml