我有兴趣开发一个库,该库将通过 Parse 移动后端跨设备同步核心数据模型。我想反映 iCloud 核心数据同步尝试提供的功能。
为什么不使用 iCloud 或Ensembles?我目前在生产应用程序中使用 iCloud 核心数据同步,但对我来说效果不佳。我还想提供独立于 Apple ID 的身份验证,这是我想摆脱 iCloud 的另一个原因。就 Ensembles 而言,由于Dropbox 同步 API的弃用,我不确定这是否仍然适用于 Dropbox 。
我还没有开始开发图书馆。我正在寻找关于我的计划的反馈,如下所述。此设计基于此 SO answer。
图书馆的总体设计:
该库将提供一个标准的核心数据堆栈,该堆栈将设置持久存储协调器和托管对象上下文。所有标准核心数据 CRUD 操作都将通过库提供的接口进行。
每次发生 CUD 操作时,都会在后台将同步操作对象保存到 Parse,其中包含重现操作所需的所有信息。这包括:发生的操作类型、被操作对象的唯一标识符,以及在创建操作的情况下,将提供父对象和关系。
- 每个操作都有一个与之关联的 change_id 编号。每次设备下载并执行操作时,它都会存储与该操作关联的最新change_id。
- 在上传每个同步操作之前,设备会向服务器发送一个请求,以确保存储的 change_id 编号与本地存储的一致。如果服务器上的 change_id 较高,它会首先下载所有同步操作并执行它们,然后上传自己的同步操作。
- 冲突(两个设备在离线时编辑相同的值)将通过确定哪个设备最后更改值来解决。
我在这里错过了什么吗?这种方法有哪些潜在的陷阱?我听说同步很难,这种类型的任务应该留给最有经验的开发人员吗?