保持iPhone应用程序与GWT应用程序同步

时间:2010-02-12 17:14:17

标签: iphone gwt core-data data-synchronization

我正在开发一款应该可以在离线和在线模式下工作的iPhone应用程序 在它的在线模式中,它应该将用户输入的所有信息提供给由GWT / GAE支持的Web服务。 在它的离线模式下,它应该在本地存储信息,当连接可用时,将它同步到Web服务。

目前我的计划如下:

  1. 使用Protobuffers在应用程序和Web服务之间建立连接,实现高效的线上通信
  2. 使用Core Data使用本地数据库
  3. 轮询网络状态,并在可用时同步数据库并保留某种local-db-to-remote-db密钥同步。
  4. 问题是 - 我正朝着正确的方向前进吗?实现这个的标准模式是什么?也许有人可以指向一个以类似方式工作的开源应用程序?

    我对iPhone编码很陌生,很高兴听到任何建议。

    由于

3 个答案:

答案 0 :(得分:2)

我认为你们一起模糊了这些问题。

  • 如果您对制作GWT网络界面有疑问,那就是一个问题。
  • 有关如何将iPhone同步到网络服务的问题是另一个问题。为此,您不希望使用GWT的RPC进行同步,因为您必须伪造iPhone代码中序列化系统的“浏览器端”,GWT通常为您提供。

答案 1 :(得分:0)

关于系统设计方向: 首先,如果没有真正的需要,不要创建2个不同的应用程序,一个GWT和其他iPhone 创建一个但写得很好的GWT应用程序。它将脱机工作没问题,并将使用HTML feature -- offline application cache管理您的数据 如果必须创建2个单独的应用程序 至少可以节省你自己的努力而且不要写两次服务器,就好像你使用标准的GWT方法一样,你几乎无法通过独立应用程序与服务器交谈(它是通过HTTP压缩JSON与一些棘手的标题...)或将写东西twise所以请查看GAE支持的RestLet library

关于与离线/在线切换保持同步的方式: 有几种方法需要考虑,而且所有方法都不完美。因此,当你奉献自己的想法时,你会想到你所期望的......不要成为Microsoft Word,不要试图超越用户。 如果在用例中至少有一个场景需要用户干预来合并更改(并且会有 - 将它带到银行) - 而不是你将为此实现UI - 而不是有充分的理由经常使用它 - 用户会习惯它。因为他开始使用应用程序,所以它会在很短的时间内看到它,因为你需要它来实现一个超级合并逻辑,仅在非常特殊的情况下询问用户......不要这样做。 平衡努力。因为这种代码中的错误会给用户带来的混乱比共同利益要痛苦得多。

所以如何: 一种方式是Do-UnDo方式。 离线时 - 用户按时间顺序保存用户对数据执行操作的日志 一旦连接 - 发送到服务器并执行它们。从服务器到客户端相同。 只要你没有编写每种操作都包含大量数据的Photoshop软件,大多数情况下都能正常工作。 GangOfFour也称为Action Pattern。

另一种方式是源控制方式。 - 版本,甚至可能是锁。非常依赖应用。 DBMS内部有时会将其用于事务实现。

并且总是有一个选项在Ofline时只读: - )

答案 2 :(得分:0)

不知道您是否考虑过使用Sync Framework来管理同步。如果您感兴趣,可以查看开源项目OpenMobster的Sync服务。您可以执行以下同步操作

  • 双向
  • 单向客户
  • 单向设备
  • 在启动

除此之外,所有修改都会自动跟踪并与云同步。当网络连接断开时,您可以让您的应用离线。它将跟踪任何更改,并在连接返回时自动在后台与云同步。它还提供跨多个设备的iCloud同步

此外,使用推送通知同步云中的修改,因此即使数据存储在本地,数据也始终是最新的。

以下是开源项目的链接:http://openmobster.googlecode.com

以下是iPhone App Sync的链接:http://code.google.com/p/openmobster/wiki/iPhoneSyncApp