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

111 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# readoor vs ReadViewSDK 功能差距分析
> 最后更新2026-06-18
---
## 概述
本文档对比 readoor`BookView/EPUB/`EPUB 阅读器与 ReadViewSDK 的功能差异,列出 readoor 已实现但 ReadViewSDK **尚未实现**的功能,以及实现方式存在差异的功能。
---
## 未实现的功能
### 1. 字体下载
**readoor 状态:** 已实现。`RBCoreEpubFontDownloadViewController` + `RBCoreEpubFontDownloadHandler` 提供字体下载管理,支持用户从服务端下载自定义字体并通过 `@font-face` 注入阅读器。
**ReadViewSDK 状态:** 未实现。`RDEPUBFontNormalizer` 仅负责注册 EPUB 内嵌字体(`CTFontManagerRegisterFontsForURL`)和系统字体回退,无字体下载/商店功能。
**影响:** 用户只能使用系统字体和 EPUB 自带字体,无法扩展字体选择。
---
### 2. 服务器同步笔记/书签
**readoor 状态:** 已实现。`pullEpubNoteInfo`/`pushEpubNoteInfo` 通过 API 同步笔记到云端,支持多设备数据一致性。
**ReadViewSDK 状态:** 未实现。`RDEPUBReaderDelegate` 提供 `didUpdateHighlights`、`didUpdateBookmarks` 等回调,但仅为本地通知,无网络请求或远程同步逻辑。笔记/书签数据完全在本地管理。
**影响:** 用户换设备后阅读数据(书签、高亮、笔记)会丢失。
---
### 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 端 `handleDocumentClick``epub-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.js``window.RDInjectedCSS.setStyle(identifier, cssText, options)` 直接操作 style 标签内容。功能等价,但机制不同。
---
## 总结
| # | 功能 | 优先级 | 复杂度 |
|---|------|--------|--------|
| 1 | 字体下载 | 中 | 中(需后端接口 + 下载管理) |
| 2 | 服务器同步 | 高 | 高(需 API 设计 + 冲突解决) |
| 3 | 加密 EPUB | 高 | 中(需对接加密方案) |
| 4 | 试读/购买权限 | 高 | 低SDK 层暴露权限接口即可) |
| 5 | 阅读统计上报 | 中 | 低delegate 暴露事件即可) |
| 6 | 图片点击放大 | 中 | 低JS 端监听图片点击 + 原生展示) |