尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Folo 移动端 v0.1.5 版本特性技术解读:通知与未读体系、批量已读与体验打磨

Folo 移动端 v0.1.5 版本特性技术解读:通知与未读体系、批量已读与体验打磨 Folo 移动端 v0.1.5 版本特性技术解读通知与未读体系、批量已读与体验打磨导读本文围绕 FoloAI RSS Reader移动端 v0.1.5 变更记录 展开逐条解读该版本引入的可配置新条目通知、未读角标与详细未读计数、批量将订阅源或分类标记为已读、AI 摘要默认开启等核心改动并结合apps/mobile源码说明其底层实现链路Firebase Cloud Messaging 推送、expo-notifications 角标、上下文菜单批量操作等。读完本文你将能对照当前仓库源码理解这些发布说明背后的功能入口、默认值配置与数据流走向。一、版本概览一次围绕“未读治理”的集中交付v0.1.5 的变更按 changelog 模板 的三段式组织Shiny new things新特性、Improvements改进与No longer broken修复。三部分围绕同一条主线展开帮助用户更高效地掌握“有新内容 → 有多少未读 → 一键清空 → 点击直达正文”这一完整阅读链路。新特性清单如下为新条目提供可配置的通知#3424引入未读角标#3424将文档链接整合进动作页7e553db支持将订阅源或分类一键标记为已读53b2136提供显示详细未读计数的选项#3453其中 #3424 从变更记录看同时牵动通知、角标、分享入口隐藏与分享修复等多个改动可以推断这是一个围绕“推送与分享体系”的横切工作流。二、可配置的新条目通知从 FCM 令牌到点击直达正文2.1 功能描述v0.1.5 为移动端引入了可配置的新条目通知当用户订阅的源产生新条目时App 可推送提醒且用户能够按需开关该能力。这说明“是否接收推送”已成为一个可配置项而不再是无条件行为。2.2 源码侧的推送链路在 useMessaging.ts 中可以看到完整链路令牌注册useUpdateMessagingToken在用户登录whoami?.id存在且具备通知操作权限hasNotificationActions时触发通过followClient.api.messaging.createToken({ token, channel: Platform.OS })将设备 FCM 令牌上报服务端同时缓存在本地kv键名为firebase_messaging_token见 useMessaging.ts。令牌刷新通过 Firebase Messaging 的onTokenRefresh监听令牌轮换并自动重新注册。消息路由useMessaging接收 Remote Message识别message.data.type new-entry类型的推送读取其中的entryId与view字段然后调用navigation.pushControllerView(EntryDetailScreen, ...)直接将用户带入对应条目详情页见 useMessaging.ts。这一设计意味着服务端推送的 data 载荷至少包含type、view、entryId三个字段移动端据此完成“点开推送即读文章”的深度链接体验。从依赖清单看推送能力由react-native-firebase/messagingFCM与expo-notifications通知呈现、权限与角标共同承担二者均声明于 apps/mobile/package.json。2.3 权限请求与系统通道[v0.1.5 之后仍沿用的] 通知权限申请逻辑位于 permission.tsAndroid 端首先创建名为default的通知渠道配置importance: AndroidImportance.MAX、振动模式[0, 250, 250, 250]与提示色随后按“先查询、再请求”的顺序获取权限未授权时弹出系统请求权限被拒绝时返回false并弹出错误提示不会静默失败。2.4 可配置性入口仓库中 Notifications 设置路由 已为通知设置页预留了占位实现同时 SettingsList.tsx 以titles.notifications作为菜单项文案并配NotificationCuteReIcon图标从源码结构看通知配置入口已接入设置体系。三、未读角标与详细未读计数一个开关两种粒度3.1 未读角标App Icon Badge角标能力由 useUnreadCountBadge.ts 实现它通过useUnreadAll()读取全局未读总数在每次变化后调用setBadgeCountAsyncWithPermission(unread)把数字同步到系统桌面角标expo-notifications的setBadgeCountAsync。关键约束在其开关语义上角标默认关闭。在共享设置默认值 defaults.ts 中showUnreadCountBadgeMobile: false对应 UI 设置接口 interface.ts。开关判定实现在 permission.ts读取getUISettings().showUnreadCountBadgeMobile开关关闭默认状态且未显式跳过检查时直接返回false不写角标开启后还需完成通知授权否则同样放弃为避免无效调用若目标计数与当前角标相同则直接返回幂等保护。3.2 详细未读计数#3453除“角标显示/隐藏”这一粗粒度选项外#3453 提供了显示详细未读计数的选项。从订阅列表组件如 SubscriptionItem.tsx、InboxItem.tsx与 CategoryGrouped.tsx 对未读计数的使用可以推断该选项控制列表内未读数字的展示粒度例如分组/分类维度上的统计明细使得大列表场景下用户无需进入具体分组即可感知各维度积压量。四、批量已读订阅源与分类的“一键清零”4.1 功能描述v0.1.5 让用户可以对单个订阅源或整个分类执行“标记为已读”操作解决订阅量大时逐条划掉的痛点。4.2 上下文菜单的实现在 feeds.tsx 的订阅源上下文菜单中可以看到markFeedAsRead的调用菜单项触发后执行unreadSyncService.markFeedAsRead(feedIds)见 feeds.tsx其中feedIds可来自单选订阅源或整组订阅源集合。分类场景则通过对选中分类展开为feedIds数组后复用同一markFeedAsRead服务完成批量清零达到“分类维度一键已读”的效果。4.3 与既有已读能力的配合该能力与移动端既有“条目级已读”逻辑apps/mobile/src/modules/entry-list/hooks.ts等互补条目级用于逐条消费源/分类级用于整体清空二者共同构成完整的未读治理闭环。五、动作页文档链接与分享链路收口#3424 / 7e553db5.1 文档链接进入动作页7e553db 将“文档链接”接入动作页Actions对应设置路由 Actions.tsx。从变更语义推断用户可在条目/订阅的动作面板中直接跳转查看对应的原文文档减少“复制链接 → 浏览器打开”的手动步骤。5.2 分享按钮的可用性判断#3424Improvements 中“在不适用于某订阅源时隐藏分享按钮”与 No longer broken 中“修复无法分享订阅源 URL”同属 #3424 的分享链路整改旧行为分享按钮无条件出现但对某些订阅源例如无站点的纯列表源或特殊订阅类型分享操作会失败新行为先判断该订阅源是否存在可分享的 URL/资源再决定按钮显隐同时修复了此前导致分享动作失败的根因保证对具备分享条件的源能稳定完成分享。这两条改动在 feeds.tsx 的上下文菜单中也有对应仅当subscription.feedId对应源存在getFeedById可命中时才执行setStringAsync(feed.url)之类分享逻辑。六、AI 摘要与阅读视觉层的打磨6.1 AI 摘要默认开启8da8a71v0.1.5 将 AI 摘要设置为默认启用。这一语义在共享 UI 设置的默认值中得到印证defaults.ts 中summary: true对应接口 interface.ts 的布尔字段。默认开启意味着新用户开箱即可看到条目摘要无需手动进入设置开启该默认值位于follow/shared共享包可推断为保证桌面端与移动端行为一致。6.2 AI 摘要样式增强87aa062同版本对 AI 摘要的视觉样式做了增强使其在正文中与普通内容区分更清晰。移动端 AI 摘要相关 UI 集中在 modules/ai/summary.tsx可结合该文件继续查看样式实现。6.3 其余视觉与反馈改进订阅源请求失败的错误提示#3455当订阅源抓取失败时不再静默而是向用户展示明确错误信息。上下文菜单中feed.errorAt/feed.errorMessage字段的存在见 feeds.tsx说明数据层已具备错误状态字段前端据此渲染提示。时间线列表分隔线样式b1c356f与Toast 样式升级83e7764属于信息密度与反馈层的一致性打磨。显著性能改进23eaf86变更记录仅给出哈希而未量化具体指标从措辞看属于渲染/滚动链路的优化具体收益以实际使用为准。七、No longer broken六个关键修复的技术要点修复点影响订阅源 URL 分享失效#3424恢复对可分享订阅源的分享能力同名分类在不同视图下的区分错误d70f082订阅列表按视图准确区分同名分类避免“标记已读/展开”作用于错误目标重复菜单项f24f21a清理上下文菜单与动作面板中的重复操作项条目文字偶发错位17dd1e7修正条目文本定位保证正文排版稳定视图选择器按压缩放闪烁d66d49c消除 Timeline 视图切换时的闪烁提升交互顺滑度特定图片加载导致崩溃7b20633修复特定图片来源下的稳定性问题其中“同名分类跨视图混淆”的修复对多视图如时间线/收件箱/订阅列表等视图体系见 TimelineViewSelector.tsx用户尤为重要分类名称相同但归属视图不同时此前操作可能命中错误上下文修复后按视图隔离语义得到保证。八、如何在本仓库验证这些能力若希望对照源码逐条验证 v0.1.5 的能力推荐按以下路径阅读推送与角标useMessaging.ts、permission.ts、useUnreadCountBadge.ts配合共享默认值 defaults.ts批量已读context-menu/feeds.tsx设置入口modules/settings/SettingsList.tsx 与modules/settings/routes/下的 Actions、Notifications、General 路由依赖版本通知与角标相关的expo-notifications、react-native-firebase/messaging等声明见 apps/mobile/package.json相邻版本对比可对比 v0.1.4 与 v0.1.6 的变更记录观察该特性线的演进脉络。需要说明的是changelog 中的版本号0.1.x是移动端早期里程碑的记录以当前仓库为准apps/mobile/package.json 中包的当前版本已迭代至更高版本本文所述功能的能力入口与默认值均以仓库内源码现状为准。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表