IOS-DOC-003 实现阅读事件本地收集 #20
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
需要收集用户阅读行为:打开资料、停留时间、上次阅读位置、标记已读。
目标:iOS 侧接入 Rust ReadingEvent 并本地暂存。
事件:MaterialOpened、MaterialClosed、PositionChanged、Heartbeat、MarkedAsRead
实现建议:打开 MaterialReaderView 时记录 MaterialOpened、页面停留期间每 15 秒生成 Heartbeat、滚动/翻页时生成 PositionChanged、退出页面时生成 MaterialClosed、用户点击标记已读时生成 MarkedAsRead
验收标准:打开资料有事件、退出资料有事件、阅读时长可计算、Markdown 能记录 block/scroll 位置、PDF 至少能记录 pageNumber、事件可本地缓存
实现完成 (2026-06-02)
新增文件
Features/MaterialReader/ReadingEventCollector.swift(~120 行)单例
ReadingEventCollector,负责阅读事件生命周期管理:open(materialId:)— 记录 MaterialOpened,启动 15s 心跳定时器close(materialId:)— 停止心跳,记录 MaterialClosed(含 active_seconds)updatePosition(materialId:position:)— 2s 防抖,记录 PositionChangedmarkAsRead(materialId:)— 记录 MarkedAsReadexportPending() → [ReadingEvent]— 导出所有未上报事件clearExported(count:)— 确认前 count 条已上传修改文件
MaterialReaderView.swift— 集成事件采集:.onAppear→ 触发 MaterialOpened.onDisappear→ 触发 MaterialClosedGeometryReader+PreferenceKey检测可见 block事件流程