微信号:gh_f86c241826a6

介绍:不止于技术分享,不取悦他人,写给懂的你看~

记一次 Epub 阅读器同步功能

2018-06-01 22:58 吴小龙同學


最近完成一个我起初认为根本做不到的功能,要实现 Epub 阅读器 PC、iOS、Android 记笔记三端同步零误差,就是 iOS 端记了一个笔记,到 Android 手机上能有这个笔记,然后点击能准确跳到这个笔记所在的阅读位置,起初我为什么认为根本做不到呢,因为三端实现方式都不一样,PC 端是网上找的代码,iOS 端应该前人自己写的,而 Android 端用的开源 FBReader,三端定位跳转各不一样,PC 端定位是章节 + 段落的偏移量,iOS 端是章节的偏移量,Android 端只有段落的概念,这些代码已经经过了很多手,很乱,所以我觉得很有难度。
一开始需求,首先要实现 iOS 端和 Android 端同步,定位跳转没有说要零误差,采取的方案是一端向另一端靠,我当仁不让,落到我头上,因为底层一些核心代码看不到,我也不会去改源码,主要是不敢改,怕影响了 Epub 基础的阅读功能/捂脸,要向 iOS 端靠,我需要解决两个难点,1、需要将段落的偏移量转成 iOS 端所需要的章节偏移量;2、还要能转回来,接口统一章节偏移量,我拿到数据后,需要将这些章节偏移量转成 FBReader 需要的段落偏移量,还是按照原来的段落的偏移量进行跳转定位。转化过程一个字:煎熬,时间往后推移 ,终于实现了,但是定位跳转大概有两三行误差,这种误差越往书籍后面越大,兄弟公司无法接受这种误差,拍板要实现同步完全零误差,我哭了,我已经尽力了!领导的话,也许不是 Android 端不行,也许是 iOS 端问题,听到这话,心里些须安慰。 之前的方案明显不行,需要 iOS 端一起改,采用的方案,是我们向着同一个约定靠,这个约定规则我们自己定,因此前期我们要搞明白三端的有哪些差异性,才能制定这个约定,另外我还是要段落和章节之间的互转。FBReader 有很多自己的特性,比如标点符号不能选,默认会和前面的字一起选上,英文不能选字母,默认会选单词等,FBReader 算做 Epub 的标杆,这些也对于用户体验很合理,还有 FBReader 有一些用户看不到的“无效”占位,比如样式,这是前面没有发现的,我在转章节过程需要干掉这些,等等。 最终我们实现零误差,泪崩,解脱了,这个项目到最后,我们每个人都不想做了,真的煎熬!不过我也 Get 一些,在之前和项目经理朱哥聊天中,他就提出了这两种解决方案,是那种按照程序式说的,朱哥项目管理可为老道,只不过考虑开发成本,先采用了第一个方案,一个改肯定比多个人改的好。结果挺完美的,也是很有成就感的。

 
吴小龙同学 更多文章 作业1:Java 开发接口 之 环境搭建 Markdown 常用语法 福利|这里有一份价值 7680 元的英语学习资料,要免费送给你 吴小龙同学读者群 作业0:搭建个人博客
猜您喜欢 如何判断刷屏文章的真伪? 不懂术语没法混啊! Rails: 日志处理101 一只天竺螨的日常 读《图解密码技术》(二):认证