TO-DO 无后端待办事项应用开源项目

我要开发同款
匿名用户2017年01月06日
89阅读
开发技术Object-c
所属分类Objective-C、个人助理软件、应用工具
授权协议MIT

作品详情

一个无后端待办事项应用,数据用LeanCloud进行同步。

简介

这是一个无后端的待办事项应用,数据用LeanCloud进行同步,也是我的第三个iOS项目。

做这个项目的初衷是想比较全面地体现我的前后端水平,该同步算法从整理思路到实现95%的代码(意为接近稳定)花了两周时间,除思路外没有任何代码可以参考(反正我是没有找到...

界面设计来源于 DO ,部分素材和界面为本人设计。

该项目于2016-12-29日第一版开发完成,之前由于意外收录可能有些朋友clone的是不稳定版,还请重新下载一次。

项目演示

测试服务器

为了方便大家观察服务器的数据,测试账号已公开,要是有什么情况请通知我,(当然万一发生了类似超额的情况我不一定会解决),另一方面会这样做的主要原因是自己搭建的话可能比较麻烦。

注:从2016年12月31日起,该项目中的所有的第三方APIKey 已经换成测试账号中的新秘钥,且之前的APIKey都被弃用。

LeanCloud账号

todotest

Abcd123!@#

七牛账号(存放头像)

sgtodo@126.com

Abcd123!@#

高德

高德Key要BundleID,请各位自行配置,不用地图也一样。

同步算法、思路等

如果你对这个感兴趣的话,请查看以下内容,并对照相应代码进行理解。

相关代码位于 SGSyncManager.m 和配置于LeanCloud云函数中的nodejs代码。

思路来源

该同步思路来源于以下两篇回答,并根据项目需求总结而来。

服务端和各种客户端(手机端,平板端,web端)怎样进行数据同步?

Evernote的同步方式是怎样的?

同步方式

每一批次两个并行队列,每次最多同步X条数据,超过X条下次进行同步。

每批同步分上传和下载(与队列不对应),若上传或下载数超过上限,则下一批次同步。

同步类型

若本地没有同步记录,则将本地所有数据进行上传,并将服务器上所有的数据进行下载(IncrementalSync)

若 lastSyncTimeOnServer=lastSyncTimeOnClient,表明服务器数据没有变化,则仅需要上传本地修改过的数据和新增的数据(SendChanges)

若 lastSyncTimeOnServer>lastSyncTimeOnClient,则进行全量同步,先对比同步所有已有数据,再将其他数据从服务器上下载(FullSync)

其他情况进行(IncrementalSync)

注意事项

所有同步时间戳均以服务器时间为准,每次同步之前先获取服务器的时间戳

对比同步规则:1.大版本同步小版本2.版本相同的话,以线上数据为准进行覆盖(另一种做法是建立冲突副本,根据本项目的实际情况不采用这种方式)

异常情况

以下几种情况会影响同步时数据的原子性:

云函数返回之前挂掉:下次同步则为fullsync,同时在对比时会将objectId赋值给本地对应的待办事项。

若在批次之间挂掉的话(上一批成功,下一批挂掉),这时需要在判断同步类型时,判断上一次同步成功的记录次数,若次数超限,此次同步为fullsync。

同步难点

处理各种异常情况,保证数据的一致性和原子性

同步效率

分批同步

同步流程

同步稳定性

从我大致写好同步功能(2016-6-20)到今天(2016-12-30)一共产生了3300条同步记录,暂时没有发现数据错误的地方,如果各位发现这方面有什么问题和Bug请一定提交issue,非常感谢。

同步记录截图:

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论