17

我正在开发一个应用程序,它的数据管理是通过 Core Data 实现的,我正在研究如何实现一个功能来同步两个不同设备之间的数据(甚至最终在 iDevices 和 Mac 之间)。

到目前为止,我还没有发现任何有趣或有用的东西,所以我要求您提供一个好的起点、指南或可遵循的模型。你有没有意识到这样的事情?

更新

我已经开始在这个问题上悬赏。在 iOS 上同步可能是一项艰巨的任务,但是来吧,有很多应用程序提供设备到设备的同步功能。我的问题是:他们是怎么做到的?最好的方法是什么?有哪些不同的解决方案?

更新 2

这个问题现在肯定已经过时了,因为 iCloud 已经发布了将近一年。我想让它保持活力,因为它可以为设备之间的移动数据同步提供有趣的见解。

4

4 回答 4

11

如果你想自己做,这可能是一个非常好的但具有挑战性的练习。我不知道有任何第三方框架可以促进“iDevices”之间的 P2P 连接,除了下面的那些,来自 Apple。如果您不想重新发明轮子,您可以沿着这些思路进行一些研究。我是根据我通过应用服务器实现同步服务的(很少)经验来回答的——原则必须或多或少与 P2P 方法相同。

第一步是设计一个用于同步数据的协议。您可能需要自己回答的问题:

  • 关于数据同步我需要了解什么?
  • 我想同步我的核心数据模型的哪一部分?我应该对当前模型进行更改以促进同步吗?
  • 我将使用什么序列化/反序列化机制?
  • 我将如何能够在多个设备上唯一地识别实体?
  • 我将如何对我的数据进行版本控制?如何判断哪些实体需要同步?
  • 我是否需要能够恢复同步操作?
  • 我将如何跟踪同步进度以及如何处理失败和异常情况?我将如何通知用户这些?
  • 我更喜欢“增量”同步(模型的一部分)还是“全局”同步(同时同步整个模型)?
  • 用户需要多久在设备之间同步一次?
  • 是否有任何安全考虑?我需要加密吗?
  • 等等

这只是触及表面而已。随着您的前进,您肯定会发现更多需要考虑的事情。

接下来,确定您希望如何在设备之间进行连接。您似乎更喜欢无线解决方案,即 P2P 类型。为此,我将从查看以下工具开始​​:

  • GameKit(此框架具有用于通过蓝牙在设备之间建立连接的 API)
  • Bonjour(用于通过网络发现设备的 Apple 协议 - 请参阅BonjourWeb 示例应用程序)+ BSD 套接字

根据前面讨论的设计决策选择您觉得最舒服的工具。我无法帮助你,因为我对他们中的任何一个都没有任何经验。正如墨菲斯所说:

我只能给你看门。你是那个必须走过它的人。

抱歉,有点幽默:)

最后,决定实施同步机制的解决方案。例如,您可以选择客户端-服务器模型(一台设备将侦听连接,另一台将启动它)。

更多相关文档:

我希望这能给你一个开始的道路。

于 2011-06-02T13:52:33.780 回答
3

同步数据是出了名的棘手。简单的解决方案比没有解决方案更糟糕。

有关此事的良好精神指导,请查看Things 的作者正在使用他们即将推出的云同步功能做什么。我希望他们会发布一个同步 API,开发人员可以通过它实现同步服务。但即使他们把它留给自己,他们也很好地展示了真正完成这项任务所需的那种反省。

于 2011-05-27T20:06:30.497 回答
2

“Couchbase for iOS”可能会满足您的需求

https://github.com/couchbaselabs/iOS-Couchbase

根据自述文件:

Mobile Couchbase for iOS

Apache CouchDB on iOS provides a simple way to sync your application

跨设备数据,并提供用户数据的云备份。与其他云解决方案不同,数据由 Couchbase Mobile 托管在设备上,因此即使网络出现故障或速度较慢(飞机、地​​铁、后院),应用程序也能响应用户。

What this means for you:

You can embed the rock solid distributed database, Mobile

Couchbase,在您的 iOS 设备上。您的 iOS 应用程序可以使用 Apache CouchDB 久经考验的同步技术。如果您 <3 个 CouchApps,您可以将它们部署为 iOS 应用程序。

于 2011-05-29T16:22:56.300 回答
-1

我将从Apple API Sync Services开始,看看它是否满足您的需求。原则上,它可以让您在所有 Apple 设备和服务之间进行同步。

于 2011-06-01T16:03:24.603 回答