ReadViewSDK/Doc/readoor-vs-readview-feature-gap.md
shenlei c65c190b71 feat: EPUB阅读器搜索、注释、CFI模块及大书远距跳转优化
- 实现EPUB阅读器搜索功能及选中注释功能
- 优化CFI模块,修复代码审查发现的11个问题
- 实现大书远距目录跳转与后台补全优化方案
- 优化设置面板与章节运行时联动
- 重构及大量改进优化
2026-06-22 20:26:34 +08:00

4.2 KiB
Raw Blame History

readoor vs ReadViewSDK 功能差距分析

最后更新2026-06-18


概述

本文档对比 readoorBookView/EPUB/EPUB 阅读器与 ReadViewSDK 的功能差异,列出 readoor 已实现但 ReadViewSDK 尚未实现的功能,以及实现方式存在差异的功能。


未实现的功能

1. 字体下载

readoor 状态: 已实现。RBCoreEpubFontDownloadViewController + RBCoreEpubFontDownloadHandler 提供字体下载管理,支持用户从服务端下载自定义字体并通过 @font-face 注入阅读器。

ReadViewSDK 状态: 未实现。RDEPUBFontNormalizer 仅负责注册 EPUB 内嵌字体(CTFontManagerRegisterFontsForURL)和系统字体回退,无字体下载/商店功能。

影响: 用户只能使用系统字体和 EPUB 自带字体,无法扩展字体选择。


2. 服务器同步笔记/书签

readoor 状态: 已实现。pullEpubNoteInfo/pushEpubNoteInfo 通过 API 同步笔记到云端,支持多设备数据一致性。

ReadViewSDK 状态: 未实现。RDEPUBReaderDelegate 提供 didUpdateHighlightsdidUpdateBookmarks 等回调,但仅为本地通知,无网络请求或远程同步逻辑。笔记/书签数据完全在本地管理。

影响: 用户换设备后阅读数据(书签、高亮、笔记)会丢失。


3. 加密 EPUB 解密

readoor 状态: 已实现。STSRDFileManagerStorage readToFileDeCrypt:password: 基于 bookID 拼接密码,对所有 EPUB 资源HTML、CSS、图片进行解密加载。

ReadViewSDK 状态: 未实现。RDEPUBParser 直接解析标准 EPUB 归档,无加解密层。

影响: 无法打开加密的 EPUB 文件。


4. 试读/购买权限控制

readoor 状态: 已实现。支持三种权限模式:免费试读、登录后免费、购买后阅读。通过 API 返回的权限字段控制章节可读性。

ReadViewSDK 状态: 未实现。无试读限制、付费墙或章节权限控制逻辑。

影响: SDK 无商业化能力,无法限制用户只阅读已购买的章节。


5. 阅读统计上报

readoor 状态: 已实现。RDStatisticsManager 上报阅读进度sectionNo + 页面内进度),集成埋点系统。

ReadViewSDK 状态: 未实现。JS 端 reportProgression() 仅将进度通过 webkit.messageHandlers 传递给原生端,属于本地 bridge 通信,无远程上报。

影响: 无法收集用户阅读行为数据用于运营分析。


6. 图片点击放大

readoor 状态: 已实现。点击 EPUB 内图片发送通知,弹出全屏图片查看(showImageView)。

ReadViewSDK 状态: 未实现。JS 端 handleDocumentClickepub-bridge.js:388-400)仅处理链接点击,不处理图片点击事件。

影响: 用户无法放大查看 EPUB 中的小图片或细节图。


实现方式存在差异的功能

7. 亮度调节

readoor 方式: 通过黑色半透明 CALayer overlay 暗化屏幕,不改变系统亮度。

ReadViewSDK 方式: 直接设置 UIScreen.main.brightness(系统屏幕亮度 API。已实现但会影响系统全局亮度。


8. 搜索结果上下文

readoor 方式: 搜索结果显示匹配文本前后各 30 字符上下文。

ReadViewSDK 方式: previewRadius 为 12 字符(RDEPUBReaderController+DataSource.swift:196-201),上下文较短。


9. CSS 主题切换机制

readoor 方式: 通过 JS classList.toggle("mycss") 切换 CSS class 实现主题切换。

ReadViewSDK 方式: 通过 cssInjector.jswindow.RDInjectedCSS.setStyle(identifier, cssText, options) 直接操作 style 标签内容。功能等价,但机制不同。


总结

# 功能 优先级 复杂度
1 字体下载 中(需后端接口 + 下载管理)
2 服务器同步 高(需 API 设计 + 冲突解决)
3 加密 EPUB 中(需对接加密方案)
4 试读/购买权限 SDK 层暴露权限接口即可)
5 阅读统计上报 delegate 暴露事件即可)
6 图片点击放大 JS 端监听图片点击 + 原生展示)