保持iPhone应用程序与GWT应用程序同步
我正在开发一款可在脱机和在线模式下工作的iPhone应用程序。
在它的在线模式下,它应该提供用户输入到GWT/GAE支持的Web服务的所有信息。 在离线模式下,它应该在本地存储信息,并在连接可用时将其同步到Web服务。保持iPhone应用程序与GWT应用程序同步
目前我的计划如下:
- 提供一个应用程序,并使用Protobuffers高效过度的有线通信
- 与本地数据库工作中使用的核心数据
- 投票web服务之间的连接网络状态以及何时可用同步数据库并保持某种本地数据库到远程数据库密钥的同步。
问题是 - 我在正确的方向吗?是否实现这个标准模式?也许有人可以将我指向一个以类似方式工作的开源应用程序?
我真的很新iPhone编码,并会很高兴听到任何建议。
谢谢
有关系统设计方向: 首先,如果没有真正的需要不创建2级不同的应用程序一个GWT和其他iPhone 创造之一,但写得很好的GWT应用程序。这将脱机工作没有问题,并将使用HTML feature -- offline application cache HTML feature -- offline application cache如果必须创建2个独立的应用程序 至少要节省自己的努力,不要写服务器两次,如果你使用标准的GWT aproach你几乎会sertanly失败从独立的应用程序(这是压缩JSON over HTTP与一些棘手的标题...)或将写东西,所以看看RestLet library服务器与GAE很好的支持。
关于保持与离线/在线切换同步的方式: 有几种需要考虑的方法,并且它们都不是完美的。因此,当你考虑到你的想法时... ...不要微软Word不要试图智取用户。 如果在用例中至少有一个场景需要用户干预来合并更改(并且将会 - 请将它带到银行) - 比您为此实现用户界面要好 - 常常需要使用它 - 用户会习惯它。它比自从他开始使用该应用程序一段时间以后会看到它要好,因为需要它是很罕见的,因为您实现了超级合并逻辑,仅在非常特殊的情况下才会询问用户......不要这样做。 平衡努力。因为这样的代码中的错误将引入用户的混乱比共同的利益更加痛苦。
so how:HOW: 一种方法是Do-UnDo方式。 离线时 - 保持用户对数据按时间顺序执行的操作日志用户在连接后立即执行它们 - 发送到服务器并执行它们。从服务器到客户端一样。 只要您不是在每次操作中编写大量数据的Photoshop软件,大多数情况下都能正常工作。也被称为GangOfFour的Action Pattern。
另一种方式是源代码控制方式。 - 版本,甚至可能是锁。非常依赖于应用。 DBMS在某些时候将其用于事务实现。
而且总有一种选择只有当Ofline :-)
我想你已经在一起模糊了问题。
- 如果您有关于制作GWT Web界面的问题,那是一个问题。
- 有关如何将iPhone同步到Web服务的问题是一个不同的问题。为此,您不希望使用GWT的RPC进行同步,因为您必须在您的iPhone代码中虚拟出序列化系统的“浏览器端”,而GWT通常为您提供该代码。
我同意我的问题可能有点模糊。 关于你的第一点 - 这不是我所问的,第二点更接近。 我意识到我不能使用GWT的RPC,并且必须提供一个自定义的Web服务,这就是我在问题中写的,我打算提供一个ProtoBufs接口。 我问的是 - 这种工作流程有没有共同的模式?帮助将Core Data与远程数据同步的库? 教程? – reflog 2010-02-13 10:47:21
不知道你是否使用同步框架来管理同步考虑被读取。如果您有兴趣,可以看看OpenMobster的Sync服务。你可以做以下的同步操作
- 双向
- 单向客户
- 单向设备
- 启动时
除此之外,所有的修改都自动跟踪并已同步与云。网络连接断开时,您可以让应用程序脱机。它将跟踪所有更改,并在连接返回时自动在后台将其与云同步。它还提供跨多个设备的iCloud同步
此外,使用推送通知同步云中的修改,因此即使数据本地存储,数据也始终为当前数据。
这里是一个开源项目链接:http://openmobster.googlecode.com
这里是一个iPhone应用程序同步链接:http://code.google.com/p/openmobster/wiki/iPhoneSyncApp
没有OpenMobster了! – confile 2015-01-21 19:00:45
我觉得你的问题更多的是与一般的同步问题(谁是主人, iPhone或gwt后端的本地更改)对不对?我也会对此感兴趣。 – EightyEight 2010-02-12 17:19:20
这就是我感兴趣的内容。将本地更改同步到Web服务器上的主数据集。 – reflog 2010-02-13 10:47:56