# 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 端监听图片点击 + 原生展示) |