在 iOS 应用程序之间同步数据有啥好的解决方案? [关闭]

Posted

技术标签:

【中文标题】在 iOS 应用程序之间同步数据有啥好的解决方案? [关闭]【英文标题】:What is a good solution to synchronize data between iOS apps? [closed]在 iOS 应用程序之间同步数据有什么好的解决方案? [关闭] 【发布时间】:2011-05-27 19:44:33 【问题描述】:

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

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

更新

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

更新 2

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

【问题讨论】:

您想要无线解决方案,还是在 iDevice 同步时同步您要查找的内容? 无线解决方案,如果可能的话! 是否假设只有两个设备,或者可以有三个或更多用户/设备?任何设备都可以修改任意数据吗?当合并冲突到来时,你将如何解决它们? 我知道在分布式数据库之间收集数据时,合并是一个常见问题。我想知道的是其他人如何解决这个问题。如果只是蛮力合并的问题,那不是我所说的“同步”。 合并问题不是一个通用的解决方案,但需要考虑您的域来完成。在 Core Data 中,它们处理此处定义的不相交的编辑和冲突解决 Core Data Programming Guide: Change Management - 一个常见的解决方案是“失败”,这是可取和可接受的,因为这意味着同时存在重复编辑 - 进入“离线”/同步以后的更改时间尺度 = 频繁失败 【参考方案1】:

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

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

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

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

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

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

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

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

对不起,有点幽默:)

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

更多相关文档:

Networking & Internet Starting Point Document Transfer Strategies

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

【讨论】:

这个答案并没有“解决”这个问题,但将是一个良好的同步技术规划的良好起点。【参考方案2】:

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

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

【讨论】:

嗯,有很多应用程序都具有“设备间同步”功能。我只想知道他们是怎么做到的。 Things 的作者可能会找到更好的解决方案,但他们怎么知道呢? 我认为他只是在警告您要期待比您从所有关于“云”的嗡嗡声中想象的更高级别的复杂性。这就像日期和时间编程,乍一看很简单,但当您尝试至少进行自定义时,就会变得异常复杂。 我预计没有特定的复杂程度。我认为同步是一项艰巨的任务,即使从哲学上来说也是如此:) 我不是在寻找 简单 解决方案。我正在寻找 a 解决方案。 顺便说一句,我不想​​“在云端”同步(暂时)。我只想在设备之间同步。稍后我会想到云、雨等。 在设备之间进行“同步”的应用程序通常要么是简单的数据传输,要么是暴力破解 - 在您开始寻求解决方案之前,需要询问和回答很多问题。【参考方案3】:

“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 久经考验的同步 技术。 如果您有

【讨论】:

Tris 显然很有希望......但我必须将现有的 Core Data 数据库迁移到这个新数据库,这有点吓人...... Couchbase 的问题在于它提供了一种“在云端”同步数据的方法,而不是直接在设备之间同步数据的 p2p 方法...... @marzapower 它是一个分布式数据库,将 git 视为一个数据库。所以它不需要是设备云,它就像设备设备一样容易。不,它没有自动主机发现,但可以在应用程序中设置 URL 已过期(参见 repo 说明),新 URL:github.com/couchbaselabs/iOS-Couchbase-manifest【参考方案4】:

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

【讨论】:

这个服务是否可以直接实现不同设备之间的同步?我的意思是,中间不使用计算机或云服务。 ***.com/questions/3276888/sync-services-and-ios : 同步服务在 iOS 设备上不可用...所以对我来说没用。 有传言称 iSync 及其基础服务将在 Lion 中消失。

以上是关于在 iOS 应用程序之间同步数据有啥好的解决方案? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Unity上面有啥好的热更新方案

Unity上面有啥好的热更新方案

JQOM 有啥好的参考吗?

打字稿中有啥好的静态代码分析工具吗? [关闭]

oracle上亿表海量数据进行大批量数据删除有啥好的解决方案

easyui datagrid导出Excel 有啥好的解决方法吗