我正在研究构建一个应用程序,它在离线时和在线时一样好用。由于应用程序在离线时无法与服务器通信,因此需要进行某种程度的同步。
在为您的 iPhone 规划离线操作和同步时,有哪些好的工具可以阅读和开始思考?
我必须自己创建哪些工具,而不是苹果已经提供的工具来帮助解决这个特定问题?
我正在研究构建一个应用程序,它在离线时和在线时一样好用。由于应用程序在离线时无法与服务器通信,因此需要进行某种程度的同步。
在为您的 iPhone 规划离线操作和同步时,有哪些好的工具可以阅读和开始思考?
我必须自己创建哪些工具,而不是苹果已经提供的工具来帮助解决这个特定问题?
在过去 2 个月左右的时间里,我一直在开发一个可以处理这种确切行为的应用程序。它有一小部分仅在线的功能和大量离线/在线的功能。
我正在使用 sqlite 进行本地存储,如此处所建议的,使用 sqlitepersistentobjects 库的修改版本。sqlitepersistentobjects 的基本版本不是线程安全的,因此请注意您是否正在使用它。(查看objectiverecord:objectivesync以获得线程安全的替代方案,但准备好深入研究代码)。如果您愿意为 3.0 sdk 开发,那么核心数据是 sqlite 库的另一种可能性。
整体架构非常简单,我使用 sqlite 对本地存储进行建模,并使用目标资源针对 rails 应用程序和 REST api 进行远程交互。它可以使用 xml 或 json 进行数据序列化。
当在本地修改对象时,首先将更改保存到该对象的 sqlite 数据库记录中,然后添加到队列中,该队列也被序列化并存储在本地 sqlite db 中。(然后可以随时处理队列)
如果有可用的连接,任何排队的本地更改都将被反序列化并添加到 NSOperationQueue 中,然后在后台处理它们。
为了使这一切正常工作,我对 NSOperation 进行了子类化,以便它可以支持多种类型的远程队列操作 - 创建、更新、删除基本上使用目标资源来发出远程请求。
使用 NSOperationQueue 和 NSOperation 的好处是它们为您处理后台线程,因此我强烈建议您查看这些类的苹果文档以及苹果线程指南。
当应用程序加载时,会在后台完成并处理一些远程检查以获取最新数据 - 尽管老实说,我仍在稍微改变这种行为方式。
这是迄今为止我必须处理的内容的快速概述......希望它有所帮助。
应用商店中有大量应用程序同时依赖在线和离线数据
你真正应该做的是在你的应用程序启动时,运行一个后台线程(它静默运行,所以你的用户永远不会看到任何延迟)。该线程从您的服务器下载最新数据并将其推送到您的本地数据库(sqlite 是最佳选择)
确保您实施某种数据版本控制,以便您的应用程序仅下载自上次下载以来实际更改的数据 - 否则您将不必要地下载可能非常庞大的整个数据集(取决于您的应用程序要求)
执行此操作时还要确保测试互联网连接。如果没有可用的互联网,请务必提醒用户
这样你就可以两全其美了。远离互联网的用户仍然可以将您的应用程序与他们的本地 sqlite 数据一起使用
在 iphone os 3.0 中,苹果引入了推送服务 - 您可以简单地“推送”您的数据而不是执行“拉取”,但这在当前的 iPhone OS (2.xx) 中不可用
推送在这里可能不是一个可行的选择,因为您可以推送的数据量很小,并且基本上回到“告诉我的应用程序进行服务器调用”。我们在 Satchel 中使用在线/离线模型。每当我们必须与服务器通信时,我们都会捆绑该通信(一个 URL 和可能的一些 POST 数据)并将其存储到数据库中。如果我们在线,我们会立即将其拉回并发送,当我们收到有效响应时,我们会从数据库中删除记录。如果我们离线,这些行会增加,下次我们在线时,它们会被发送出去。这不是在所有情况下都可行的模型,但可以适应大多数情况。
在 3.0 中,您可以访问 CoreData,这是一个很棒的数据管理工具。除此之外,NSURLXXX 家族是你的朋友。
我会将离线时收集的所有信息存储在 SQLite 数据库中。然后,根据用户的请求,您可以使用 HTTP 或您可以想出的自定义 TCP/IP 协议与服务器同步所有存储的信息。
近 10 年来,我一直在 Palm OS 应用程序上使用这种方法,它们确实非常有效。
据我所知,您必须完成此操作的唯一“工具”是带有 Cocoa Touch 的普通旧 OBJECTIVE-C。尽管您可以使用一些 TCP/IP C++ 库,如果您决定实现自己的协议,这些库将使您的生活更轻松。
想知道您是否考虑过使用同步框架来管理同步。如果您对此感兴趣,可以查看开源项目 OpenMobster 的 Sync 服务。您可以执行以下同步操作
除此之外,所有修改都会自动跟踪并与云同步。当网络连接中断时,您可以让您的应用程序离线。它将跟踪任何更改,并在连接返回时自动在后台将其与云同步。它还提供跨多个设备的同步,如 iCloud
此外,云中的修改使用推送通知进行同步,因此即使数据存储在本地,数据也始终是最新的。
这是开源项目的链接:http: //openmobster.googlecode.com
这是 iPhone App Sync 的链接:http ://code.google.com/p/openmobster/wiki/iPhoneSyncApp