本发明涉及计算机技术领域,具体而言,本发明涉及一种通讯录同步方法、装置、存储介质和终端。
背景技术:
传统的通讯录同步方案有以下缺点:1、容易因网络超时等原因导致同步失败,造成客户端频繁向服务器同步,对服务器造成压力。2、用户若清除了客户端的同步记录,将造成通讯录的重复同步,从而引起通讯录异常。3、用户在多个设备之间切换时,造成通讯录的反复同步,引起通讯录异常。
技术实现要素:
本发明基于上述缺点,提出一种通讯录同步方法、装置、存储介质和终端,以解决上述缺点中的至少一个。
本发明提出的通讯录同步方法,包括:
获取本地通讯录的同步数据;
判断所述同步数据中是否有本地通讯录全量同步历史记录;
若是,根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列;
若否,根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列;
发送所述待发送队列。
优选地,所述同步数据中包括用户id和设备id;所述判断所述同步数据中是否有本地通讯录全量同步历史记录,包括:
判断所述同步数据中是否有当前的用户id和当前的设备id对应的本地通讯录全量同步历史记录。
优选地,所述同步数据中包括上一次同步成功后生成的同步哈希值;所述判断所述同步数据中是否有本地通讯录全量同步历史记录,包括:
判断所述同步数据中是否有同步哈希值;
若有,则所述判断所述同步数据中是否有本地通讯录全量同步历史记录的结果为是;
若否,则判断所述同步数据中是否有本地通讯录全量同步历史记录的结果为否。
优选地,所述同步哈希值基于上一次同步成功后的通讯录数据生成;所述根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列,包括:
计算当前本地全部通讯录数据的客户端哈希值;
判断所述客户端哈希值与所述同步哈希值是否匹配;
若不匹配,则根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列。
优选地,所述同步数据包括存储于本地的本地通讯录的同步记录,所述获取本地通讯录的同步数据,包括:
判断本地是否存储有本地通讯录的同步记录;
若本地存储有本地通讯录的同步记录,则从本地获取本地通讯录的同步数据;
若本地没有本地通讯录的同步记录,则计算当前本地全部通讯录数据的客户端哈希值;向服务器或其它设备查询是否有与所述客户端哈希值相匹配的同步哈希值;若服务器或其它设备有与所述客户端哈希值相匹配的同步哈希值,则结束同步。
优选地,所述发送所述待发送队列,包括:
判断所述待发送队列是否为空;
若为空,判断所述同步数据中是否有本地通讯录全量同步历史记录;若所述同步数据中有本地通讯录全量同步历史记录,结束同步;若所述同步数据中没有本地通讯录全量同步历史记录,则将所述判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为是,并继续所述获取本地通讯录的同步数据的步骤;
若不为空,根据所述待发送队列生成串行数据包,发送所述串行数据包。
优选地,所述根据所述待发送队列生成串行数据包,发送所述串行数据包之后,还包括:
若接收到所述串行数据包发送失败的反馈,确认重试次数不大于预设次数,重新发送所述串行数据包。
优选地,所述根据所述待发送队列生成串行数据包,发送所述串行数据包之后,还包括:
若接收到所述串行数据包发送无效的反馈,将所述重试次数清零;清空所述待发送队列;将判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为否。
优选地,所述根据所述待发送队列生成,发送所述之后,还包括:
若接收到所述串行数据包发送成功的反馈,将所述重试次数清零;在所述同步数据中,将判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为是;在本地删除所述串行数据包。
优选地,所述获取本地通讯录的同步数据之前,还包括:
确认当前用户id具有本地通讯录的操作权限。
本发明还提出一种通讯录同步装置,包括:
获取模块,用于获取本地通讯录的同步数据;
判断模块,用于判断所述同步数据中是否有本地通讯录全量同步历史记录;
增量同步模块,用于当所述同步数据中有本地通讯录全量同步历史记录时,根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列;
全量同步模块,用于当所述同步数据中没有本地通讯录全量同步历史记录时,根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列;
发送模块,用于发送所述待发送队列。
本发明还提出一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任意一项所述的通讯录同步方法。
本发明还提出一种终端,所述终端包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现前述任意一项所述的通讯录同步方法。
本发明具有以下有益效果:
1、本发明可根据本地通讯录全量同步历史记录,生成本地通讯录增量数据的待发送队列,或是生成本地通讯录全量数据的待发送队列,从而避免通讯录数据的重复全量更新;在提高通讯录数据同步成功率和可靠性的基础上,可减轻服务器或其它设备的同步压力。
2、本发明的同步数据中可包括用户id和设备id,以实现一个用户id在多个设备id上同步通讯录数据,或多个用户id在同一个设备id上同步通讯录数据的情况;客户端也可维护多份通讯录数据的同步状态,可避免切换用户id或切换设备id的行为造成通讯录数据的反复同步,提高了本发明的适用范围。
3、本发明不仅可通过同步哈希值确定本终端或本用户曾经是否进行过本地通讯录数据的全量同步,还可将所述同步哈希值与客户端哈希值进行比较,以确定是否需要进行增量同步,避免了将同步过的全部通讯录数据与当前本地全部通讯录数据进行比较的过程,提高了是否需要进行增量同步的判断效率。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明通讯录同步方法第一实施例的流程示意图;
图2为本发明通讯录同步方法另一实施例的流程示意图;
图3为本发明通讯录同步方法又一实施例的流程示意图;
图4为一个与本发明通讯录同步方法相配合的服务器的流程示意图;
图5为本发明终端实施例的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式,这里使用的“第一”、“第二”仅用于区别同一技术特征,并不对该技术特征的顺序和数量等加以限定。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;pcs(personalcommunicationsservice,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;pda(personaldigitalassistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或gps(globalpositioningsystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是pda、mid(mobileinternetdevice,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
在阐述本发明的技术方案之前,下面先对本发明中涉及的部分名称或术语进行说明。其中,通讯录指客户端储存的电话号码与联系人列表等信息。通讯录同步指客户端向服务器或其它设备发送通讯录数据,使得服务器或其它设备得到一份客户端通讯录的拷贝。全量同步指客户端发送全部通讯录数据到服务器或其它设备(例如:根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列,并发送至服务器或其它设备),使得服务器或其它设备得到一份客户端通讯录全部数据的拷贝。增量同步指在已经发生全量同步的基础上,客户端通讯录修改后,向服务器或其它设备发送修改所涉及的通讯录数据(例如:根据全量同步的历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列,并发送至服务器或其它设备),使得服务器或其它设备得到一份包括修改后的客户端通讯录全部数据的拷贝。
本发明提出一种通讯录同步方法,用于解决通讯录反复同步的问题,如图1所示的第一实施例,包括如下步骤:
步骤s10:获取本地通讯录的同步数据;
步骤s20:判断所述同步数据中是否有本地通讯录全量同步历史记录;若是,则执行步骤s30;若否,则执行步骤s40;
步骤s30:根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列;
步骤s40:根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列;
步骤s50:发送所述待发送队列。
其中,每个步骤具体如下:
步骤s10:获取本地通讯录的同步数据。
所述本地通讯录的同步数据可包括保存在本地的同步记录,亦可为根据用户或系统指令,从云端服务器或其它设备上下载的同步数据。所述同步数据中可包括通讯录的历史同步次数、通讯录每次同步的时间,通讯录的用户id和设备id等信息,还可包括最后一次同步的通讯录数据。
当同一个用户id需要在多个设备上使用时,可仅根据用户id从本地查找所述同步记录,或从云端服务器或其它设备上,获取对应于当前用户id的本地通讯录的同步数据。当一个设备上需要登录多个用户id时,亦可仅根据设备id从本地查找所述同步记录,或从云端服务器或其它设备上,获取对应于本设备id的本地通讯录的同步数据。获取所述同步数据的条件可根据具体情况确定。
故,在本发明的另一个实施例中,所述同步数据中可包括用户id和设备id;所述判断所述同步数据中是否有本地通讯录全量同步历史记录,包括:
判断所述同步数据中是否有当前的用户id和当前的设备id对应的本地通讯录全量同步历史记录。
当当前的终端用户需要同步通讯录时,可根据当前的设备id和当前的用户id,从本地获取所述同步数据,或从云端服务器或其它设备上,获取对应于当前的设备id和当前的用户id的本地通讯录的同步数据,以确认所述同步数据中是否有当前的用户id和当前的设备id对应的本地通讯录全量同步历史记录。若所述同步数据中有本地通讯录全量同步历史记录,则可在后续步骤中避免重复进行全量同步。
当前的设备id可对应于当前的终端,亦可对应于其它设备的id;例如通过当前的终端,可将其它设备id的通讯录数据同步至服务器或其它设备中,或将对应于当前的终端的通讯录数据同步至服务器或其它设备中。本实施例可根据用户id和设备id标识一份通讯录,适用于一个用户id在多个设备id上同步通讯录数据,或多个用户id在同一个设备id上同步通讯录数据的情况;服务器或其它设备可备份多份对应的通讯录数据,客户端也可维护多份通讯录数据的同步状态,可避免切换用户id或切换设备id的行为造成通讯录数据的反复同步,提高了本发明的适用范围。
步骤s20:判断所述同步数据中是否有本地通讯录全量同步历史记录;若是,则执行步骤s30;若否,则执行步骤s40;
所述本地通讯录全量同步历史记录为客户端发送全部通讯录数据到服务器或其它设备的历史记录,使得服务器或其它设备得到一份客户端全部通讯录数据的拷贝。为方便判断所述同步数据中是否有本地通讯录全量同步历史记录,可在本地设置一个本地同步数据标志位。例如,进行过通讯录全量同步后,将该本地同步数据标志位设置为ready,以标识出所述同步数据中有本地通讯录全量同步历史记录;若没有进行过全量同步,则将该本地同步数据标志位设置为none,以标识出所述同步数据中没有本地通讯录全量同步历史记录。本发明还可包括既不为ready也不为none的初始状态,可将本地同步数据标志位设置为invalid。若本地通讯录数据进行一次全量同步之后,若客户端通讯录发生修改,可向服务器或其它设备发送修改所涉及的数据,即进行增量同步,该增量同步并不影响所述本地同步数据标志位的状态,即当所述本地同步数据标志位为ready时,可进行增量同步,增量同步之后,所述本地同步数据标志位仍然为ready,以避免本终端后续重复进行全量同步,或重复发送全量同步的请求。
在部分情况下,存储于本地的本地同步数据标志位可能被清除或丢失;在此情况下,如果直接进行全量同步,将使终端在进行全量同步的时间之内难以执行其它任务,造成不便。为减少本地的同步数据丢失引起的重复全量同步现象,本发明还提出如下实施例:
所述同步数据中包括上一次同步成功后生成的同步哈希值;所述判断所述同步数据中是否有本地通讯录全量同步历史记录,包括:
判断所述同步数据中是否有同步哈希值;
若有,则所述判断所述同步数据中是否有本地通讯录全量同步历史记录的结果为是;
若否,则判断所述同步数据中是否有本地通讯录全量同步历史记录的结果为否。
所述上一次同步成功后生成的同步哈希值,可以是上一次全量同步成功时生成的同步哈希值,也可以是上一次增量同步时生成的哈希值。由于上一次同步成功后即生成同步哈希值,故只要所述同步数据中存在所述同步哈希值,即可表示上一次已同步成功。若上一次同步为全量同步,则所述同步数据中包括上一次的本地通讯录全量同步历史记录;若上一次同步为增量同步,由于增量同步是在具有本地通讯录全量同步数据之后才能进行的,故可推断所述同步数据中必定有本地通讯录全量同步历史记录。故,只要所述同步数据中包括上一次同步成功后生成的同步哈希值,不管上一次同步是增量同步还是全量同步,均可表示所述同步数据中有本地通讯录全量同步历史记录。如果没有所述同步哈希值,则表示本地通讯录没有进行过全量同步,或者之前的全量同步没有同步成功。
在每次全量同步或增量同步成功之后,均可在服务器、其它设备或本终端中的至少一个设备上记录一个同步哈希值;在下一次同步时,可从服务器或其它设备上获取包括所述同步哈希值的同步数据,或直接从本终端上获取包括所述同步哈希值的同步数据,以根据该同步哈希值确定本地通讯录数据是否有进行全量同步。当同步哈希值记录于服务器或其它设备上时,本实施例可在本地同步数据丢失时,通过读取服务器或其它设备上的同步数据中的同步哈希值,确定本终端或本用户之前是否进行过本地通讯录数据的全量同步,以减少本地通讯录数据重复同步的概率。
进一步地,生成该同步哈希值时,可将本次全量同步或增量同步之后的全部通讯录数据作为输入,以得到一个与最新的全部通讯录数据相关联的同步哈希值,该同步哈希值可存储于服务器或其它设备上。计算当前本地全部通讯录数据的客户端哈希值时,可采用与所述同步哈希值同样的输入和哈希算法,以得到与当前本地全部通讯录数据相关联的客户端哈希值。当客户端哈希值与服务器或其它设备上存储的同步哈希值相匹配或相同时,则表示当前本地全部通讯录数据与服务器或其它设备上更新的全部通讯录数据相同,可不进行全量同步或增量同步。故本发明还提出另一实施例:
所述同步哈希值基于上一次同步成功后的全部通讯录数据生成;所述根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列,包括:
计算当前本地全部通讯录数据的客户端哈希值;
判断所述客户端哈希值与所述同步哈希值是否匹配;
若不匹配,则根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列。
在本实施例中,当客户端哈希值与服务器或其它设备上存储于的同步哈希值不匹配或不相同时,则表示本终端或本用户已进行过全量同步,或,已进行过全量同步和增量同步;但同步之后的通讯录数据与当前本地全部通讯录数据不同,可根据服务器或其它设备上已同步的通讯录数据与当前本地全部通讯录数据,进行增量同步。
本实施例不仅可通过所述同步哈希值确定本终端或本用户曾经是否进行过本地通讯录数据的全量同步,还可根据所述同步哈希值确定上一次同步成功后的全部通讯录数据与当前本地全部通讯录数据是否相同,以进一步确定是否需要发生增量同步。本实施例避免了从服务器或其它设备上读取所述全部通讯录数据,并与当前本地全部通讯录数据进行比较的过程,仅通过所述同步哈希值即可确定已同步的全部通讯录数据与当前本地全部通讯录数据是否相同,提高了判断效率。
在部分实施例中,所述同步数据可存储于本地客户端;如果本地客户端清除了数据,丢失了通讯的同步状态,则无法判断本地通讯录是否与服务器或其它设备同步过。故,本发明还提出另一实施例:所述同步数据包括存储于本地的本地通讯录的同步记录,所述获取本地通讯录的同步数据,包括:
判断本地是否存储有本地通讯录的同步记录;
若本地存储有本地通讯录的同步记录,则从本地获取本地通讯录的同步数据;
若本地没有本地通讯录的同步记录,则计算当前本地全部通讯录数据的客户端哈希值;向服务器或其它设备查询是否有与所述客户端哈希值相匹配的同步哈希值;若服务器或其它设备有与所述客户端哈希值相匹配的同步哈希值,则结束同步。
本实施例先根据本地存储的同步记录确定所述待发送队列,在本地数据被清除的情况下,再通过查询服务器或其它设备的同步哈希值确定是否需要继续同步,可实现在没有网络的状态下,确定本地通讯数据是否需要同步,减轻了向服务器或其它设备查询的压力。
所述查询可通过向服务器或其它设备发送获取本地通讯录的同步数据的请求实现。如果服务器或其它设备返回的同步数据中存在同步哈希值,且所述同步哈希值和基于客户端通讯录计算出的客户端哈希值匹配,则表示所述当前本地全部通讯录数据与上一次同步成功之后的全部通讯录数据相同,本地客户端可跳过全量同步或增量同步的步骤,无需重复备份当前本地全部通讯录数据。
如果服务器或其它设备返回的同步数据中存在同步哈希值,但所述同步哈希值和基于客户端通讯录计算出的客户端哈希值不匹配,则表示所述当前本地全部通讯录数据与上一次同步成功之后的全部通讯录数据不相同,本地客户端可进行增量同步的步骤。如果服务器或其它设备返回的同步数据中不存在同步哈希值,则表示本地通讯录数据可能没有进行过同步或同步数据丢失,本地客户端可进行全量同步的步骤。
结合前述实施例,当所述同步数据中有同步哈希值时,可将所述本地同步数据标志位的状态置为ready,以表示进行过全量同步,下次同步时无需进行全量同步;当所述同步数据中不存在同步哈希值时,可将该本地同步数据标志位设置为none,表示没有进行过全量同步,下次同步时可进行全量同步。
步骤s30:根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列。
当判断所述同步数据中有本地通讯录全量同步历史记录时,则根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列,以将修改后的通讯录数据发送至服务器或其它设备,避免重复发送全部通讯录数据。如前所述,所述同步数据中可包括通讯录每次同步的时间,通讯录的用户id和设备id,最后一次同步的通讯录数据等,故生成所述待发送队列之前,可查找当前用户id上一次同步的时间与当前时间之间的通讯录数据变化,根据所述通讯录数据变化,生成所述待发送队列;或将最后一次同步的通讯录数据与当前本地全部通讯录数据进行比较,以生成所述待发送队列。
步骤s40:根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列。
当判断所述同步数据中没有本地通讯录全量同步历史记录时,则根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列,以将当前本地全部通讯录数据发送至服务器或其它设备同步。
步骤s50:发送所述待发送队列。
可采用串行数据包的方式发送所述待发送队列,并设置对应的发送反馈信息,以根据所述发送反馈信息确认所述待发送队列是否发送成功。
本发明的第一实施例可根据本地通讯录全量同步历史记录,生成本地通讯录增量数据的待发送队列,或是生成本地通讯录全量数据的待发送队列,并发送对应的待发送队列,从而避免通讯录数据的重复全量更新;在提高通讯录数据同步成功率和可靠性的基础上,可减轻服务器或其它设备的同步压力。
发送所述待发送队列之前,还可确认所述待发送队列是否为空,如果为空,则需要同步的通讯录数据为空,说明当前本地全部通讯录数据为空,或本地通讯录增量数据为空,即本终端或本设备id向服务器或其它设备发送的更新数据为空,无需更新,可结束同步过程。结束同步过程之前,可在所述同步数据中,标记本地通讯录全量同步历史记录,例如,将前述的本地同步数据标志位的状态置为ready,以表示下次同步时无需进行全量同步。故本发明还提出如下实施例,如图2所示,
所述发送所述待发送队列,包括:
步骤s51:判断所述待发送队列是否为空;若不为空,则进行步骤s53;若为空,则进行步骤s52;所述步骤s52又可进一步包括如下多个步骤。
步骤s521:判断所述同步数据中是否有本地通讯录全量同步历史记录;若所述同步数据中有本地通讯录全量同步历史记录,则执行步骤s522:结束同步;若所述同步数据中没有本地通讯录全量同步历史记录,则执行步骤s523:将所述判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为是,并继续所述获取本地通讯录的同步数据的步骤s10;
步骤s53:若不为空,根据所述待发送队列生成串行数据包,发送所述串行数据包。
本实施例可在所述待发送队列不为空的情况下,进行全量同步或增量同步;当所述待发送队列为空时,可根据情况判断后续步骤。在本实施例中,当所述待发送队列为空,且所述同步数据中有本地通讯录全量同步历史记录,则说明已经进行过全量同步,本次增量同步的数据为空,可直接结束同步过程。当所述待发送队列为空,且所述同步数据中没有本地通讯录全量同步历史记录(或前述的本地同步数据标志位设置不是ready)时,在部分实施例中,可能说明本设备id可能为新增的设备id或本设备id上登录了新的用户id,或当前本地的全部通讯录数据少于服务器上或其它设备上对应的全部通讯录数据。
在当前本地的全部通讯录数据少于服务器上或其它设备上对应的全部通讯录数据时,若所述同步数据中没有本地通讯录全量同步历史记录,则会根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列,并出现本地全部通讯录数据通过全量同步覆盖掉服务器上或其它设备上的全部通讯录数据,从而造成服务器上或其它设备上部分通讯录数据丢失的问题。本实施例可在所述待发送队列为空时,进一步确定所述同步数据中是否有本地通讯录全量同步历史记录,若有,则说明本次同步为增量同步,且增量同步的通讯录数据为空,可直接结束同步;若所述同步数据中没有本地通讯录全量同步历史记录,则说明当前本地的通讯录数据可能少于服务器或其它设备上的通讯录数据,故生成的待发送队列为空,可将所述判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为是,以避免下一次同步时,发生全量同步而造成服务器或其它设备上部分同步的数据丢失的问题。
如图3所示的实施例,全量同步过程可采用串行数据包的方式,当读取所述串行数据包时,本地同步数据标志位的状态置可标记为syncing。可根据串行数据包的发送是否返回错误码,确定所述待发送队列是否发送成功。若没有返回错误码,则表示所述待发送队列发送成功,可先更新本地通讯录的同步数据,然后再删除本地的所述待发送队列对应的串行数据包,以释放内存。若返回错误码,则根据情况可重新进行同步。
在部分情况下,可能存在网络状况不佳或网络数据被占用的情况,故本发明还提出另一实施例,结合图3所示,所述根据所述待发送队列生成串行数据包,发送所述串行数据包之后,还包括:
若接收到所述串行数据包发送失败的反馈,
确认重试次数不大于预设次数,重新发送所述串行数据包。
在部分实施例中,可设置串行数据包的失败次数等标识参数,以统计所示失败的次数;当所述待发送队列发送成功后,可将所述标识参数归零,以避免本次同步的失败次数对下一次的同步产生影响。在另一些实施例中,也可能出现同步无效等异常情况,故本实施例可设置一个预设次数,使得一次同步过程中的重试次数达到所述预设次数时,即可结束本次同步,避免在一次同步过程中,不断重试发送所述串行数据包的循环。
例如,在图3所示的实施例中,若所述错误码对应的错误类型为串行数据包发送超时,可将所述预设次数设为3,即在一次同步过程中,所述串行数据包发送失败的次数不大于3次时,则继续重复串行发送所述数据包;如果大于3次,则结束本次同步,以避免同步过程出现持续不停反复发送串行数据包的死循环。
若所述串行数据包返回错误码,可根据错误码判断同步失败的错误类型。若所述错误码对应的错误类型为串行数据包无效,则清空所述待发送队列对应的串行数据包,并在所述同步数据中记录没有本地通讯录全量同步历史记录,以使同步流程返回至重新检查本地通讯录数据的同步状态。若该实施例中也设置有串行数据包的重置次数,则当返回所述串行数据包无效的错误码时,可将所述重置次数清零。故本发明还提出如下实施例:
所述根据所述待发送队列生成串行数据包,发送所述串行数据包之后,还包括:
若接收到所述串行数据包发送无效的反馈,
将所述重试次数清零;清空所述待发送队列;将判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为否。
本实施例可在通讯录数据同步异常的情况,清零本次同步的数据,并将所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为否,以在下一次同步时,根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列,提高当前本地全部通讯录数据同步成功的概率。
在本发明的又一实施例中,所述根据所述待发送队列生成串行数据包,发送所述串行数据包之后,还包括:
若接收到所述串行数据包发送成功的反馈;
将所述重试次数清零;在所述同步数据中,将判断所述同步数据中是否有本地通讯录全量同步历史记录的判断结果标记为是;在本地删除所述串行数据包。
本实施例在所述串行数据包发送成功之后,先更新所述同步数据中的本地通讯录全量同步历史记录的判断结果,并将所述重试次数清零,再删除所述串行数据包,以避免所述同步数据更新失败或重试次数清零失败而需要重新生成待发送队列的情况。
在本发明的另一实施例中,所述获取本地通讯录的同步数据之前,还包括:
确认当前用户id具有本地通讯录的操作权限。
本实施例可在同步本地通讯录数据之前,确认当前用户id的操作权限,以避免用户隐私泄露,以及造成通讯录数据误同步的情况。
图4为一个与本发明通讯录同步方法相配合的服务器的流程示意图,该流程图主要包括如下几种情况:
(1)、服务器在初始状态,即init状态,如果收到客户端的全量同步请求,则根据所述待发送队列储存接收的通讯录数据。存储完成后,记录通讯录的session_id(即设备id和/或用户id)。如果客户端发送的所述串行数据包的总包数pkt_total为1,则通讯录同步的状态变为结束,即end状态;否则,变为同步状态,即ongoing状态。
(2)、服务器在同步通讯录数据的状态,即ongoing状态,收到全量同步请求;如果所述全量同步请求中的session_id与服务器记录的不匹配,则服务器的状态变为init,按流程(1)处理,即记录为与新的设备id和/或用户id对应的通讯录数据;否则,根据匹配的session_id同步通讯录;同步完成后,如果已经处理完所有的串行数据包,即当前处理的数据包pkt_seq=pkt_next,而且pkt_seq+1=pkt_total,则服务器状态变为end。
(3)、服务器在end状态,收到客户端的全量同步请求;如果所述全量同步请求中的session_id与服务器记录的不匹配,则服务器的状态变为init,按流程(1)处理;否则,客户端必然是重试之前已经成功的全量同步请求,服务器无需处理该全量同步请求。
(4)、服务器收到增量同步请求,如果服务器在end状态,则储存通讯录数据;否则,返回错误给客户端。
本发明还提出一种通讯录同步装置,包括:
获取模块,用于获取本地通讯录的同步数据;
判断模块,用于判断所述同步数据中是否有本地通讯录全量同步历史记录;
增量同步模块,用于当所述同步数据中有本地通讯录全量同步历史记录时,根据所述全量同步历史记录与当前本地全部通讯录数据,生成本地通讯录增量数据的待发送队列;
全量同步模块,用于当所述同步数据中没有本地通讯录全量同步历史记录时,根据当前本地全部通讯录数据,生成本地通讯录全量数据的待发送队列;
发送模块,用于发送所述待发送队列。
本发明还提出一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现前述任意一项所述的通讯录同步方法。其中,所述存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随即存储器)、eprom(erasableprogrammableread-onlymemory,可擦写可编程只读存储器)、eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。可以是只读存储器,磁盘或光盘等。
本发明实施例还提供一种终端,所述终端包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任意一项所述的通讯录同步方法。
如图5所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、pda(personaldigitalassistant,个人数字助理)、pos(pointofsales,销售终端)、车载电脑、服务器等任意终端设备,以终端为手机为例:
图5示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图5,手机包括:射频(radiofrequency,rf)电路1510、存储器1520、输入单元1530、显示单元1540、传感器1550、音频电路1560、无线保真(wirelessfidelity,wi-fi)模块1570、处理器1580、以及电源1590等部件。本领域技术人员可以理解,图5中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图5对手机的各个构成部件进行具体的介绍:
rf电路1510可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1580处理;另外,将设计上行的数据发送给基站。通常,rf电路1510包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(lownoiseamplifier,lna)、双工器等。此外,rf电路1510还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(globalsystemofmobilecommunication,gsm)、通用分组无线服务(generalpacketradioservice,gprs)、码分多址(codedivisionmultipleaccess,cdma)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、长期演进(longtermevolution,lte)、电子邮件、短消息服务(shortmessagingservice,sms)等。
存储器1520可用于存储软件程序以及模块,处理器1580通过运行存储在存储器1520的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如通讯录程序等)等;存储数据区可存储根据手机的使用所创建的数据(比如通讯录数据或同步数据等)等。此外,存储器1520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1530可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1530可包括触控面板1531以及其他输入设备1532。触控面板1531,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1531上或在触控面板1531附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1531可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1580,并能接收处理器1580发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1531。除了触控面板1531,输入单元1530还可以包括其他输入设备1532。具体地,其他输入设备1532可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1540可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1540可包括显示面板1541,可选的,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板1541。进一步的,触控面板1531可覆盖显示面板1541,当触控面板1531检测到在其上或附近的触摸操作后,传送给处理器1580以确定触摸事件的类型,随后处理器1580根据触摸事件的类型在显示面板1541上提供相应的视觉输出。虽然在图5中,触控面板1531与显示面板1541是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1531与显示面板1541集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1550,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1541的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1541和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1560、扬声器1561,传声器1562可提供用户与手机之间的音频接口。音频电路1560可将接收到的音频数据转换后的电信号,传输到扬声器1561,由扬声器1561转换为声纹信号输出;另一方面,传声器1562将收集的声纹信号转换为电信号,由音频电路1560接收后转换为音频数据,再将音频数据输出处理器1580处理后,经rf电路1510以发送给比如另一手机,或者将音频数据输出至存储器1520以便进一步处理。
wi-fi属于短距离无线传输技术,手机通过wi-fi模块1570可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图5示出了wi-fi模块1570,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1580是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1520内的软件程序和/或模块,以及调用存储在存储器1520内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1580可包括一个或多个处理单元;优选的,处理器1580可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1580中。
手机还包括给各个部件供电的电源1590(比如电池),优选的,电源可以通过电源管理系统与处理器1580逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
应该理解的是,在本发明各实施例中的各功能单元可集成在一个处理模块中,也可以各个单元单独物理存在,也可以两个或两个以上单元集成于一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。