Tidyvo PRD v1.0.6(通知系统专项)#
1. 产品基本信息#
| 字段 | 内容 |
|---|---|
| 产品名称 | Tidyvo Cleaner(Google Play:Tidyvo: Deep Storage Cleaner) |
| 平台 | Android |
| 版本号 | v1.0.6 |
| 包名 | com.tidyvo.cleaner |
| 实现基线 | 线上 v1.0.5;Notification Cleaner(通知清理)已在上一版本加入 |
| 竞品基线 | Photo Recovery V1.0.3,包名 com.files.photo.recovery.restore.pro |
| 更新日期 | 2026-08-17 |
| 需求外链 | https://photo-recovery-reverse-docs.pages.dev/tidyvo-notification-prd |
| 蓝湖外链 | |
| 冲突优先级 | 旧文档中的 A/B 分组、中台多字段通知配置、业务 FCM Token 绑定、文案权重/数值优先级和 12 语言交付均废止;通知需求以本 PRD 为准 |
2. 版本目标#
在 v1.0.6 中,参考竞品已确认机制,为 Tidyvo 落地一套无 A/B 的通知方案,覆盖中台三态受众控制、按触发类型执行的普通通知频控、1—8 套场景模板与状态召回、单 Topic 后台唤醒、四类可见通知及统一广告点击链路。
3. 本次范围及具体需求#
3.1 本次范围#
| 需求编号 | 本次做 | 本次不做 |
|---|---|---|
| R1 | Tidyvo 单套通知控制:全局三态下放、2 分钟轮询、周期/状态 ID 的统一日上限 5 次与统一间隔 15 分钟、事件 ID 的内置 1 分钟间隔 | 不按通知 ID 分别配置 2/3/5 等不同上限,不照搬竞品 B 的其他频控参数 |
| R2 | 13 个周期 ID+4 个事件 ID 的 Tidyvo 映射 | 不新增竞品未出现的通知 ID 和数值优先级 |
| R3 | 每场景随客户端版本内置 1—8 套中英文通知模板;文案、按钮、路由和收起/展开 UI 整套随机 | 不设置“至少 3 套”;不做权重、顺序轮播、运行时模板配置和 12 语言中台配置 |
| R4 | 中台三态下放范围 | 不在中台配置场景、文案、上限、间隔或路由 |
| R5 | 全体客户端共用一个 FCM Topic 接收空消息唤醒,并在本地执行三态受众判断和恢复链 | 不按自然量/推广用户拆 Topic;不上传、绑定或按业务保存 FCM Token |
| R6 | 四类可见通知及统一广告点击链路 | ad_ntf 不作为 Tidyvo 产品分类;FCM Topic 空消息不属于可见通知 |
3.2 总体方案:竞品做法与 Tidyvo 方案#
| 项目 | 竞品已确认做法 | Tidyvo 本次方案 |
|---|---|---|
| 策略配置 | APK 内置不同通知配置,其中 B 为高频配置 | 只实现一套 Tidyvo 方案;竞品 B 完整参数仅作参考,不直接转成 Tidyvo 需求 |
| 普通通知调度 | 时间窗口内循环检查 ntf_items,一次选出一个可用 ID;配置中没有数值优先级 |
按 ID 顺序循环查找,从上次位置继续,一次调度最多展示 1 条 |
| 后台维持 | Service、Job、WorkManager、Alarm、开机/升级广播、FCM 多路恢复 | 按竞品已确认参数建立同样的恢复入口;每个入口最终都只启动同一套本地调度器 |
| 证据项 | 边界 |
|---|---|
| 竞品服务端受众、Topic / Token 使用方式、线上下发策略 | 无法从 APK 确认,不写成竞品事实 |
3.3 R1:Tidyvo 通知控制与竞品参考#
3.3.1 Tidyvo 实际执行控制#
| 控制层级 | 控制项 | Tidyvo 规则 | 白话解释 |
|---|---|---|---|
| 全局总控 | notification_audience_mode(通知下放范围) |
OFF / ORGANIC_ONLY / PAID_ONLY 三态 |
决定整套通知对哪类用户生效;这是总控制,不是三档发送频率 |
| 调度器 | poll_interval_minutes(轮询间隔) |
默认 2 分钟 |
每 2 分钟进入一次候选检查;一次轮询最多展示 1 条,不代表每 2 分钟必定展示 |
| 周期/状态 ID | default_daily_limit(统一单 ID 日上限) |
默认 5 次 |
所有 POLLING / STATE ID 共用该值,但每个 ID 独立计数;某 ID 当天展示满 5 次后,当天不再展示该 ID |
| 周期/状态 ID | default_interval_minutes(统一单 ID 间隔) |
默认 15 分钟 |
所有 POLLING / STATE ID 共用该值;只限制同一个 ID 的两次成功展示,不影响其他合格 ID 参加后续轮询 |
| 事件 ID | event_interval_seconds(事件单 ID 间隔) |
固定 60 秒 |
仅用于 EVENT ID 14、15、16、17;每个事件 ID 独立计算,成功展示后 60 秒内同一事件 ID 不再展示 |
| 补充项 | 执行规则 |
|---|---|
| 控制边界 | 上表五项是 Tidyvo 本次实际使用的全部通知控制;事件 60 秒间隔随客户端版本内置,不由中台配置 |
| 默认值范围 | default_daily_limit 和 default_interval_minutes 只供全部 POLLING / STATE ID 共用,不按 ID 分别配置;EVENT ID 不执行这两项 |
| 日上限统计 | 按手机当地日期 yyyyMMdd 对每个 POLLING / STATE ID 独立统计;00:00 进入新自然日后分别清零;EVENT ID 不设置日上限 |
| 事件同 ID 定义 | “同一个事件”指同一个 EVENT ID,不按文件、通知内容或项目数量区分;不同事件 ID 的 60 秒间隔互不占用 |
| 起算与计数 | 只有成功展示才计数;POLLING / STATE 候选未展示时不计日上限或 15 分钟间隔,EVENT 候选未展示时不启动或刷新 60 秒间隔 |
3.3.2 竞品 B 原始参数参考(不作为 Tidyvo 执行规则)#
下表仅用于理解竞品;Tidyvo 执行规则以第 3.3.1 节为准。
| 竞品字段 | 竞品 B 固定值 | 竞品含义 | Tidyvo 处理 |
|---|---|---|---|
ntf_switch |
1 |
竞品普通通知开启 | 不直接采用;由 Tidyvo 三态下放范围统一控制 |
upper_limit |
99 |
竞品普通通知自然日总上限 | 仅作参考;Tidyvo 不设置普通通知全局 99 条总上限 |
interval_time |
120000ms(2 分钟) |
竞品全局最短间隔 | 仅参考其 2 分钟节奏;Tidyvo 定义为轮询间隔,不定义成“每 2 分钟必发” |
ntf_m_on_upper_limit |
99 |
竞品开启通知清理权限后的普通通知总上限 | 不采用 |
ntf_m_on_interval_time |
120000ms(2 分钟) |
竞品开启通知清理权限后的普通通知间隔 | 不采用独立字段 |
continuous_ntf_num |
12 |
竞品连续通知计数阈值 | 不采用 |
ntf_cooling_time |
120000ms(2 分钟) |
竞品连续计数达到阈值后的冷却 | 不采用 |
start_time / end_time |
00:00 / 24:00 |
竞品允许尝试的时间范围 | 仅作竞品事实参考 |
repetitions |
3 |
竞品同一通知 ID 的短间隔刷新次数 | 不采用 |
max_visible_ntf |
5 |
竞品 Android 15 及以下同时可见上限 | 不采用为 Tidyvo 频控字段 |
os16_max_visible_ntf |
1 |
竞品 Android 16 及以上同时可见上限 | 不采用为 Tidyvo 频控字段 |
3.3.3 竞品通知技术标识(仅用于对照)#
| 竞品技术标识 | 竞品含义 | Tidyvo 对照关系 |
|---|---|---|
normal_ntf |
普通场景召回通知 | 对应 Tidyvo 普通通知,执行第 3.3.1 节频控 |
res_ntf |
前台服务持续展示、展开后带多个功能入口的通知 | 对应 Tidyvo 常驻通知 |
filter_ntf |
Notification Cleaner 汇总/管理通知 | 对应 Tidyvo 通知清理通知 |
ad_ntf |
竞品代码中的独立广告通知技术类型 | 只作为竞品事实保留,不作为 Tidyvo 产品通知分类 |
| 分类边界 | 执行规则 |
|---|---|
| Tidyvo 产品分类 | 以第 3.8 节为准 |
ad_ntf |
不能因为四类通知都会触发广告,就把它们统一命名为 ad_ntf |
3.4 R2:ID 调度与候选执行#
3.4.1 调度及数据共用规则#
| 规则项 | 适用范围 | 执行规则 |
|---|---|---|
| 唯一真源 | 全部场景与模板 | 第 3.5.3 节执行总表是逐 ID、逐模板的唯一真源;场景、进入条件、模板附加条件、文案、路由和 UI 均以总表同一行为准,不维护第二份映射或阈值 |
| 周期顺序 | 13 个周期 ID | 12 → 10 → 13 → 1 → 2 → 9 → 3 → 11 → 5 → 6 → 7 → 8 → 18 |
| 游标与展示 | 13 个周期 ID | 每轮从上次停留位置继续检查;找到第一个合格 ID 后,从当时合格的模板中等概率随机一套并展示,再把游标移到下一个 ID;全部不合格时本轮不展示 |
POLLING |
周期模板 | 由 2 分钟轮询检查,不代表无条件展示 |
STATE |
状态模板 | 由本地真实状态决定模板资格,仍属于普通通知 |
EVENT |
ID 14、15、16、17 | 由对应本地事件立即触发一次候选检查,不等待 2 分钟轮询,也不进入 13 项周期循环 |
| 单次事件 | ID 14、15、16、17 | 系统一次回调算一次事件;一次回调包含多个新增项目时也只执行一次候选检查 |
| 并发事件 | ID 14、15、16、17 | 前一条本地事件尚未完成候选检查时到达的新事件视为并发事件;客户端只维护一个本地事件处理锁,第一条事件取得锁,其余未取得锁的事件立即结束 |
| 处理锁范围 | ID 14、15、16、17 | 从事件进入候选检查开始,到确定展示或不展示为止;成功展示时先原子写入该事件 ID 的展示时间,再释放处理锁 |
| 事件被拦截 | ID 14、15、16、17 | 被三态受众、通知权限、事件单 ID 60 秒间隔、数据或页面可用性拦截时立即结束,不保存、不排队、不补发 |
| 事件单 ID 间隔 | ID 14、15、16、17 | 执行第 3.3.1 节固定 60 秒间隔;同一事件 ID 上一次成功展示后 60 秒内不再展示,不同事件 ID 独立计算;不执行每日 5 次和 15 分钟通用频控 |
| 通用频控 | 全部 POLLING / STATE ID |
执行第 3.3.1 节的三态受众、统一单 ID 日上限和统一单 ID 间隔 |
| 单轮 / 单事件展示 | 全部普通通知 ID | 每轮轮询或每次事件候选检查最多展示 1 条;未展示、规则不满足或数据不可用的候选不计展示次数 |
| 跨 ID 场景重叠 | 全部普通通知 ID | 同一文件或状态允许分别满足多个 ID;当前轮询或事件检查仍最多展示 1 条,不对不同 ID 做跨场景去重或互斥。未展示的并发事件不保存、不排队;后续新的轮询或独立事件仍按当时真实状态重新判断,可能展示另一个合格 ID |
| 数据有效性 | 全部状态与事件模板 | 只使用最近一次成功结果及当前仍有效的本地文件、记录和权限;数据、权限或目标页面不可用时跳过对应模板或整个 ID,不得用虚假数量、失效文件或旧结果冒充当前事实 |
| 天数计算 | 12-C、13-D |
{days_since_scan} 与 {days_since_clean} 按已过去的完整 24 小时向下取整;扫描或清理成功后立即更新时间及状态基线;变量无可靠值时动态模板不参与随机 |
12-C 英文单复数 |
12-C |
数值为 1:1 Day Without a Scan;数值大于 1:{days_since_scan} Days Without a Scan |
17-A 英文单复数 |
17-A |
数值为 1:1 Notification to Review;数值大于 1:{count} Notifications to Review |
3.5 R3:同场景随机文案#
3.5.1 随机规则#
| 规则项 | 执行规则 |
|---|---|
| 模板数量 | 每个场景随客户端版本内置 1—8 套模板,不设置最低数量;常用功能可以内置更多,但任何场景不得超过 8 套 |
| 模板调整 | 中台不能在运行时新增、删除或修改模板;后续调整必须随 App 新版本发布 |
| 文案结构 | 每套模板只保留一条中文/英文主文案和一个行动按钮,不再维护或展示独立标题与正文 |
| 完整绑定 | 每套模板完整绑定中文/英文主文案、行动按钮、固定路由、收起 UI、展开 UI 和功能相关视觉元素 |
| 模板差异 | 同一场景的不同模板必须同时使用不同文案和不同通知 UI,不能只换文字 |
| 视觉元素 | UI 必须出现与场景相关的图片、图标、数量卡片或状态图形 |
| 随机方法 | 同一 ID 有 N 套合格模板时,客户端生成 [0, N-1] 的均匀随机整数,等概率选中一整套 |
| 禁止混用 | 不得把 A 模板的文案与 B 模板的 UI、按钮或路由混合 |
| 权重与轮播 | 不配置权重,不记录轮播顺序,不要求上一条之后必须换模板;连续两次随机到同一套模板属于正常结果 |
| 动态模板 | 只有本机取得真实变量且满足触发条件时才进入随机池 |
| 变量不可用 | 只在无变量模板中随机,通知中不得出现未替换的占位符 |
| 展示次数 | 每次成功展示只随机选择一次模板,不采用竞品 repetitions=3 的短间隔刷新规则 |
3.5.2 收起与展开 UI#
| 状态 | 必须展示 | 行动按钮 | 交互 |
|---|---|---|---|
| 收起状态 | 一条短主文案、当前模板的功能图片/图标/状态元素 | 小行动按钮,使用当前模板按钮文案 | 点击通知主体或小按钮,均进入该模板的统一广告点击链路和固定路由 |
| 展开状态 | 与收起状态相同的一条主文案、更醒目的功能图片/图标/状态卡片 | 大行动按钮,使用与收起状态相同的按钮文案 | 点击通知主体或大按钮,均进入该模板的统一广告点击链路和固定路由 |
| 补充项 | 执行规则 |
|---|---|
| 无独立标题 / 正文 | 产品与 UI 层面只显示一条主文案;Android 实现可将该主文案映射到系统主文本字段,保证自定义样式降级时仍可读,但不得生成第二条可见文案 |
| 主文案适配 | 英文主文案必须在对应的 320×80 收起 UI 中完整显示,动态变量替换后也不得截断或出现未替换占位符 |
| 行动按钮长度 | 英文 CTA 最多 10 个可见字符,空格计入;中文 CTA 控制在 2—5 个汉字;收起态与展开态使用同一 CTA |
| 同一模板一致性 | 收起与展开状态保持相同主文案、视觉主题和路由 |
| 展开行为 | 展开不是生成一条新通知 |
| 不同模板差异 | 不同模板的版式结构、视觉元素或信息重点必须明显不同 |
3.5.3 场景 ID、规则、文案、路由与 UI 执行总表#
| 使用说明 | 规则 |
|---|---|
| 行级对应 | 每一行对应一套模板,可直接查看所属场景、触发与候选规则、中英文文案、点击路由、绑定 UI 和展示判断案例;案例只用于解释同一行规则,不新增执行条件 |
| 唯一真源 | 下表为逐 ID、逐模板执行的唯一真源;其他章节不重复维护同一组映射或阈值 |
| 顺序 / 场景 ID | 触发与 ID 候选规则 | 模板及附加条件 | 中文文案 | English copy(英文文案) | 路由与 UI | 案例(展示判断示例) |
|---|---|---|---|---|---|---|
| 周期 1 ID 12|长时间未检查存储 竞品:长时间未扫描 / photo |
触发:POLLING进入:距最近一次 Smart Clean 成功扫描满 24 小时;从未成功扫描时按安装满 24 小时计算 跳过 / 重置:成功扫描后立即重新计时;扫描时间和安装时间均不可用时跳过 |
12-AID 合格时参与 |
主文案: 存储很久没检查了 CTA: 立即扫描 |
Copy: Storage Check Overdue CTA: Scan Now |
路由: Smart CleanUI-12-A:收起为扫描雷达图标;展开为存储扫描面板 |
上次成功扫描在 26 小时前,之后未再扫描;ID 12 合格,本轮随机到 12-A。 |
12-BID 合格时参与 |
主文案: 是时候检查存储了 CTA: 立即检查 |
Copy: Time for a Storage Check CTA: Check Now |
路由: Smart CleanUI-12-B:收起为日历扫描图标;展开为扫描周期时间线 |
用户已 30 小时没有成功扫描;ID 12 合格,本轮随机到 12-B。 | ||
触发:STATE进入:距最近一次 Smart Clean 成功扫描满 24 小时;从未成功扫描时按安装满 24 小时计算 跳过 / 重置:成功扫描后立即重新计时;扫描时间和安装时间均不可用时跳过 |
12-C须取得真实 {days_since_scan} 且完整天数至少为 1;1 天使用英文单数 |
主文案: 已有 {days_since_scan} 天未扫描CTA: 立即扫描 |
Copy: {days_since_scan} Days Without a ScanCTA: Scan Now |
路由: Smart CleanUI-12-C:收起为真实天数徽章;展开为未扫描天数计数卡 |
距上次成功扫描已满 3 个完整 24 小时,{days_since_scan}=3,12-C 可参与。 |
|
| 周期 2 ID 10|模糊照片检查 竞品:已删除照片风险 / photo |
触发:POLLING进入:最近一次成功的 Blurry 扫描仍有至少 1 张未处理且文件存在的模糊照片 跳过 / 重置:无成功扫描、有效数量为 0、照片已处理或文件不存在时跳过;重新扫描后按新结果计算 |
10-AID 合格时参与 |
主文案: 查看模糊照片 CTA: 查看 |
Copy: Review Blurry Photos CTA: Review |
路由: BlurryUI-10-A:收起为模糊照片图标;展开为清晰/模糊对比图 |
最近一次 Blurry 扫描仍有 4 张未处理模糊照片,文件均存在;本轮随机到 10-A。 |
10-BID 合格时参与 |
主文案: 模糊照片越积越多 CTA: 查看 |
Copy: Blurry Photos Add Up CTA: Review |
路由: BlurryUI-10-B:收起为放大镜照片图标;展开为画质检查网格 |
Blurry 扫描仍有 2 张有效模糊照片;ID 10 合格,本轮随机到 10-B。 | ||
| 周期 3 ID 13|长时间未清理存储 竞品:长时间未清理 / junkcleaner |
触发:STATE进入:存在至少一次成功清理记录,且满足任一项:距最近一次成功清理满 24 小时;或当前可用空间占比较该次清理后下降至少 5 个百分点 跳过 / 重置:无成功清理记录或两项均不成立时跳过;成功清理后重记时间和可用空间占比;无空间对比基线时不能使用 13-B |
13-A存在成功清理记录,且距最近一次成功清理达到 24 小时 |
主文案: 该清理存储了 CTA: 立即清理 |
Copy: Storage Cleanup Is Due CTA: Clean Now |
路由: Smart CleanUI-13-A:收起为扫帚时钟图标;展开为清理周期卡片 |
存在成功清理记录,距最近一次成功清理已 30 小时;13-A 可参与。 |
13-B可用空间占比较最近一次成功清理后下降至少 5 个百分点 |
主文案: 可用空间正在减少 CTA: 立即检查 |
Copy: Free Space Is Shrinking CTA: Check Now |
路由: Smart CleanUI-13-B:收起为下降存储条;展开为存储占用仪表盘 |
最近一次清理后可用空间占比为 40%,当前为 34%,下降 6 个百分点;13-B 可参与。 | ||
13-C距最近一次成功清理达到 24 小时、不足 48 小时 |
主文案: 已有一天未清理 CTA: 立即清理 |
Copy: One Day Since Cleanup CTA: Clean Now |
路由: Smart CleanUI-13-C:收起为“1 天”状态徽章;展开为 24 小时清理提醒卡 |
距最近一次成功清理 30 小时,完整天数为 1;13-C 可参与。 | ||
13-D距最近一次成功清理达到 48 小时,并取得真实 {days_since_clean} |
主文案: 已有 {days_since_clean} 天未清理CTA: 立即清理 |
Copy: {days_since_clean} Days Since CleanupCTA: Clean Now |
路由: Smart CleanUI-13-D:收起为真实天数日历;展开为未清理时间轴 |
距最近一次成功清理 72 小时,{days_since_clean}=3;13-D 可参与。 |
||
| 周期 4 ID 1|综合存储检查 竞品:首页综合召回 / home |
触发:STATE进入:最近一次成功扫描距今不足 24 小时且结果仍有效,Home 可正常打开,并且 Smart Clean、Duplicates、Blurry、Screenshots、Large Files、To clean 六个功能模块中至少两个显示真实非 0 的可处理结果 跳过 / 重置:无成功扫描、扫描已满 24 小时、有效模块不足两个、数据不可用或 Home 不可达时跳过;扫描、清理或文件变化后按最新结果重新判断 |
01-AID 合格时参与 |
主文案: 检查手机存储 CTA: 立即检查 |
Copy: Run a Storage Check CTA: Check Now |
路由: HomeUI-01-A:收起为存储仪表图标;展开为存储概览仪表盘 |
最近一次扫描在 2 小时前;Duplicates 有 3 组、Screenshots 有 8 张,其余为 0;两个模块非 0,01-A 可参与。 |
01-BID 合格时参与 |
主文案: 给手机腾出空间 CTA: 打开 |
Copy: Make Room on Your Phone CTA: Open |
路由: HomeUI-01-B:收起为手机闪光图标;展开为功能入口卡片组 |
最近一次扫描在 4 小时前;Blurry、Large Files、To clean 三个模块均为非 0;01-B 可参与。 | ||
| 周期 5 ID 2|重复 / 相似照片检查 竞品:照片恢复 / photo |
触发:POLLING进入:最近一次成功的 Duplicates 扫描仍有至少 1 组未处理且相关文件存在的重复或相似照片 跳过 / 重置:无成功扫描、有效分组为 0、照片已处理或文件不存在时跳过;重新扫描后按新结果计算 |
02-AID 合格时参与 |
主文案: 查找相似照片 CTA: 查找 |
Copy: Find Similar Photos CTA: Find |
路由: DuplicatesUI-02-A:收起为重叠照片图标;展开为相似照片叠层预览 |
最近一次 Duplicates 扫描仍有 3 组未处理相似照片,文件存在;本轮随机到 02-A。 |
02-BID 合格时参与 |
主文案: 保留最好的照片 CTA: 查看 |
Copy: Keep Your Best Photos CTA: Review |
路由: DuplicatesUI-02-B:收起为照片勾选图标;展开为保留/删除双栏卡片 |
仍有 2 组有效重复照片未处理;ID 2 合格,本轮随机到 02-B。 | ||
02-CID 合格时参与 |
主文案: 给相册减减负 CTA: 整理 |
Copy: Lighten Your Photo Library CTA: Organize |
路由: DuplicatesUI-02-C:收起为照片堆叠图标;展开为相册网格和清理进度条 |
仍有 5 组有效重复或相似照片;ID 2 合格,本轮随机到 02-C。 | ||
| 周期 6 ID 9|Smart Clean 召回 竞品:垃圾清理 / junkcleaner |
触发:STATE进入:最近一次成功的 Smart Clean 扫描结果仍有效,且当前真实可清理量大于 0 跳过 / 重置:无成功扫描、结果失效或真实可清理量为 0 时整个 ID 9 跳过;成功清理、重新扫描或文件变化后按最新结果判断 |
09-AID 合格时参与 |
主文案: 垃圾文件正在累积 CTA: 立即清理 |
Copy: Junk Files Are Building Up CTA: Clean Now |
路由: Smart CleanUI-09-A:收起为扫帚闪光图标;展开为垃圾分类卡片 |
最近一次有效扫描得到 320 MB 真实可清理内容;ID 9 合格,本轮随机到 09-A。 |
09-BID 合格时参与 |
主文案: 手机需要清理了 CTA: 立即检查 |
Copy: Your Phone Needs a Cleanup CTA: Check Now |
路由: Smart CleanUI-09-B:收起为手机清洁图标;展开为扫描雷达和建议列表 |
最近一次有效扫描得到 180 MB 真实可清理内容;ID 9 合格,本轮随机到 09-B。 | ||
09-C取得真实 {junk_size} > 0 |
主文案: 发现 {junk_size} 可检查内容CTA: 查看 |
Copy: {junk_size} Ready to ReviewCTA: Review |
路由: Smart CleanUI-09-C:收起为真实容量徽章;展开为容量环和分类占比 |
最近一次有效扫描得到真实 {junk_size}=650 MB;09-C 可参与。 |
||
09-DID 合格时参与 |
主文案: 别让垃圾文件堆积 CTA: 立即清理 |
Copy: Keep Junk Files in Check CTA: Clean Now |
路由: Smart CleanUI-09-D:收起为垃圾袋图标;展开为清理前后空间对比 |
最近一次有效扫描得到 90 MB 真实可清理内容;ID 9 合格,本轮随机到 09-D。 | ||
| 周期 7 ID 3|视频压缩 竞品:视频恢复 / video |
触发:POLLING进入:本地媒体记录或最近一次成功扫描中,至少有 1 个未处理、文件存在且大小达到 30 MB 的视频 跳过 / 重置:没有 30 MB 视频、视频已处理或文件不存在时跳过 |
03-AID 合格时参与 |
主文案: 大视频很占空间 CTA: 查看 |
Copy: Large Videos Add Up CTA: View |
路由: CompressUI-03-A:收起为胶片大小标签;展开为视频列表和容量柱状图 |
本地存在 1 个未处理且仍存在的 120 MB 视频;本轮随机到 03-A。 |
03-BID 合格时参与 |
主文案: 缩小视频,腾出空间 CTA: 压缩 |
Copy: Smaller Videos, More Space CTA: Compress |
路由: CompressUI-03-B:收起为压缩箭头图标;展开为压缩前后容量对比 |
本地存在 2 个分别为 80 MB、200 MB 的有效视频;本轮随机到 03-B。 | ||
| 周期 8 ID 11|待清理项目确认 竞品:已删除文件风险 / home |
触发:POLLING进入:To clean 当前至少有 1 个待处理项目且对应文件存在 跳过 / 重置:队列为空或对应文件不存在时跳过;项目处理后按最新队列计算 |
11-AID 合格时参与 |
主文案: 还有项目等待确认 CTA: 继续 |
Copy: Items Need Your Review CTA: Continue |
路由: To cleanUI-11-A:收起为待处理托盘图标;展开为选中项目预览 |
To clean 中仍有 2 个文件等待确认,文件均存在;本轮随机到 11-A。 |
11-BID 合格时参与 |
主文案: 还差最后一步 CTA: 完成 |
Copy: One Last Step CTA: Finish |
路由: To cleanUI-11-B:收起为清单图标;展开为待确认队列卡片 |
To clean 中仍有 1 个有效待处理项目;本轮随机到 11-B。 | ||
| 周期 9 ID 5|私密文件管理 竞品:文档恢复 / document |
触发:STATE进入:Private Space 中至少存在 1 个有效文件 跳过 / 重置:有效文件数量为 0 时整个 ID 5 跳过;文件新增、移除或失效后按当前有效文件重新判断 |
05-AID 合格时参与 |
主文案: 整理私密文件 CTA: 打开 |
Copy: Organize Private Files CTA: Open |
路由: Private SpaceUI-05-A:收起为锁定照片图标;展开为私密相册保险箱插图 |
Private Space 中已有 2 个有效文件;ID 5 合格,本轮随机到 05-A。 |
05-BID 合格时参与 |
主文案: 检查私密文件 CTA: 查看 |
Copy: Review Private Files CTA: Review |
路由: Private SpaceUI-05-B:收起为盾牌文件夹图标;展开为加密文件网格 |
Private Space 中已有 3 个有效文件;ID 5 合格,本轮随机到 05-B。 | ||
| 周期 10 ID 6|截图清理 竞品:截图清理 / screenshot |
触发:POLLING进入:本地 MediaStore 或最近一次成功扫描中至少有 1 张文件仍存在的截图 跳过 / 重置:截图数据不可用、数量为 0 或文件均不存在时跳过 |
06-AID 合格时参与 |
主文案: 截图越积越多 CTA: 查看 |
Copy: Screenshots Are Piling Up CTA: View |
路由: ScreenshotsUI-06-A:收起为截图叠层图标;展开为截图拼贴预览 |
本地仍有 8 张有效截图;ID 6 合格,本轮随机到 06-A。 |
06-BID 合格时参与 |
主文案: 清理旧截图 CTA: 清理 |
Copy: Clear Old Screenshots CTA: Clean Up |
路由: ScreenshotsUI-06-B:收起为裁剪框图标;展开为截图时间轴和删除区域 |
本地仍有 5 张有效截图;ID 6 合格,本轮随机到 06-B。 | ||
06-CID 合格时参与 |
主文案: 要保留这些截图吗? CTA: 查看 |
Copy: Keep These Screenshots? CTA: Review |
路由: ScreenshotsUI-06-C:收起为问号截图图标;展开为保留/清理选择卡片 |
本地仍有 2 张有效截图;ID 6 合格,本轮随机到 06-C。 | ||
| 周期 11 ID 7|重复联系人整理 竞品:联系人备份 / contacts |
触发:POLLING进入:已获得联系人权限,且最近一次成功的 Contacts 扫描至少有 1 组重复联系人 跳过 / 重置:未授权、无成功扫描或重复分组为 0 时跳过;整理后按最新结果计算 |
07-AID 合格时参与 |
主文案: 发现重复联系人 CTA: 查看 |
Copy: Duplicate Contacts Found CTA: Review |
路由: ContactsUI-07-A:收起为双人头像图标;展开为重复联系人合并卡片 |
已授权联系人权限,最近一次扫描发现 2 组重复联系人;本轮随机到 07-A。 |
07-BID 合格时参与 |
主文案: 整理通讯录 CTA: 整理 |
Copy: Tidy Your Contact List CTA: Organize |
路由: ContactsUI-07-B:收起为通讯录勾选图标;展开为整理前后联系人列表 |
已授权联系人权限,仍有 1 组重复联系人未整理;本轮随机到 07-B。 | ||
| 周期 12 ID 8|清理记录回访 竞品:已恢复文件 / recoveryed |
触发:POLLING进入:Records 中至少有 1 条真实清理记录 跳过 / 重置:没有清理记录或记录已清空时跳过 |
08-AID 合格时参与 |
主文案: 最近清理了什么? CTA: 查看 |
Copy: What Did You Clean? CTA: View |
路由: RecordsUI-08-A:收起为历史时钟图标;展开为清理时间轴 |
Records 中存在 1 条昨天生成的真实清理记录;本轮随机到 08-A。 |
08-BID 合格时参与 |
主文案: 查看存储变化 CTA: 详情 |
Copy: See Your Storage Changes CTA: Details |
路由: RecordsUI-08-B:收起为记录图表图标;展开为空间变化折线卡片 |
Records 中存在 3 条真实清理记录且未清空;本轮随机到 08-B。 | ||
| 周期 13 ID 18|大文件 / 空间检查 竞品:大文件清理 / largeclean |
触发:STATE进入:满足任一项:Android 系统判定为低存储;或最近一次成功扫描仍有至少 1 个文件存在且达到 30 MB 跳过 / 重置:两项均不成立时跳过;大文件处理、失效或重扫无 30 MB 文件时移除 18-B、18-C |
18-A设备达到 Android 系统低存储阈值,并取得真实 {free_space} |
主文案: 仅剩 {free_space} 可用空间CTA: 立即检查 |
Copy: Only {free_space} LeftCTA: Check Now |
路由: Smart CleanUI-18-A:收起为剩余空间警告环;展开为剩余空间仪表盘 |
Android 已判定设备低存储,真实可用空间为 1.2 GB;18-A 可参与。 |
18-B存在至少 1 个文件达到 30 MB |
主文案: 发现大文件 CTA: 立即扫描 |
Copy: Large Files Found CTA: Scan Now |
路由: Smart CleanUI-18-B:收起为大文件图标;展开为大文件占用提示卡 |
最近一次扫描仍有两个 30 MB 以上文件,分别为 45 MB 和 80 MB;18-B 可参与。 | ||
18-C存在至少 1 个文件达到 30 MB,并取得真实 {largest_file_size} |
主文案: 最大文件:{largest_file_size}CTA: 立即扫描 |
Copy: Largest File: {largest_file_size}CTA: Scan Now |
路由: Smart CleanUI-18-C:收起为真实大小标签;展开为最大文件容量占比卡 |
最近一次扫描中最大有效文件为 180 MB;{largest_file_size}=180 MB,18-C 可参与。 |
||
| 本地事件 ID 14|新增媒体检查 竞品:安装包安装后清理残留 |
触发:EVENT进入:检测到新增媒体时触发一次候选检查 跳过 / 重置:被任一规则拦截即结束;不保存、不排队、不补发 |
14-A检测到任意新增媒体时参与 |
主文案: 新增媒体内容 CTA: 查看 |
Copy: New Media Added CTA: Review |
路由: Smart CleanUI-14-A:收起为新增照片图标;展开为最近媒体预览 |
系统检测到新加入一张 8 MB 照片,且 ID 14 的 60 秒间隔已结束;14-A 可参与。 |
14-B单个新增文件达到 30 MB(31,457,280 bytes)时参与;文件大小不可用时不参与 |
主文案: 新增大文件 CTA: 立即扫描 |
Copy: Large File Added CTA: Scan Now |
路由: Smart CleanUI-14-B:收起为新增大文件图标;展开为大文件容量提示卡 |
系统检测到新加入一张 80 MB 照片;14-A、14-B 均合格,本轮随机到 14-B。 | ||
| 本地事件 ID 15|剩余待清理项目 竞品:App 卸载后清理残留 |
触发:EVENT进入:一次清理完成后 To clean 仍有至少 1 个有效待处理项目时触发一次候选检查 跳过 / 重置:队列为空、文件失效或被任一规则拦截即结束;不排队、不补发 |
15-A事件条件成立时参与 |
主文案: 清理完成,仍有项目 CTA: 查看 |
Copy: Cleanup Done, Items Remain CTA: Review |
路由: To cleanUI-15-A:收起为完成勾选加提示点;展开为剩余项目卡片 |
一次清理完成后 To clean 仍有 2 个有效项目,且 ID 15 的 60 秒间隔已结束;本轮随机到 15-A。 |
15-B事件条件成立时参与 |
主文案: 已选项目等待处理 CTA: 继续 |
Copy: Selected Items Are Waiting CTA: Continue |
路由: To cleanUI-15-B:收起为待处理文件夹;展开为 To clean 列表预览 |
清理完成后仍有 1 个有效项目等待处理;ID 15 合格,本轮随机到 15-B。 | ||
| 本地事件 ID 16|新截图检查 竞品:新截图事件 |
触发:EVENT进入:检测到新截图且文件仍存在时触发一次候选检查 跳过 / 重置:截图失效或被任一规则拦截即结束;不排队、不补发 |
16-A事件条件成立时参与 |
主文案: 新截图已保存 CTA: 查看 |
Copy: New Screenshot Saved CTA: View |
路由: ScreenshotsUI-16-A:收起为新截图提示图标;展开为最新截图大预览 |
系统检测到一张仍存在的新截图,且 ID 16 的 60 秒间隔已结束;本轮随机到 16-A。 |
16-B事件条件成立时参与 |
主文案: 检查新截图 CTA: 查看 |
Copy: Review New Screenshot CTA: Review |
路由: ScreenshotsUI-16-B:收起为截图整理图标;展开为截图拼贴和整理入口 |
系统检测到新截图,处理锁取得成功且 60 秒间隔已结束;本轮随机到 16-B。 | ||
| 本地事件 ID 17|通知清理召回 竞品:通知清理 / noticlean |
触发:EVENT进入:检测到新增可清理通知、Notification Cleaner 已授权且本地真实待整理通知数量大于 0 时触发一次候选检查 跳过 / 重置:未授权、数据不可用、数量为 0 或被任一事件规则拦截时立即结束;不保存、不排队、不补发 |
17-A真实数量大于 0;1 条使用英文单数 |
主文案: {count} 条通知待整理CTA: 查看 |
Copy: {count} Notifications to ReviewCTA: Review |
路由: Notification CleanerUI-17-A:收起为带数量角标的铃铛;展开为来源 App 图标组 |
新增 1 条可清理通知,真实 {count}=1;英文主文案使用 1 Notification to Review。 |
17-B真实数量至少 5 条 |
主文案: 通知是不是太多了? CTA: 立即清理 |
Copy: Too Many Notifications? CTA: Clear Now |
路由: Notification CleanerUI-17-B:收起为堆叠通知图标;展开为整理前后通知栏对比 |
新增通知后待整理总数达到 7 条;17-A、17-B、17-C 均合格,本轮随机到 17-B。 | ||
17-C真实数量至少 3 条 |
主文案: 别错过重要通知 CTA: 查看 |
Copy: Don’t Miss Important Alerts CTA: Review |
路由: Notification CleanerUI-17-C:收起为高亮收件箱图标;展开为未读来源网格 |
新增通知后待整理总数达到 4 条;17-A、17-C 合格,本轮随机到 17-C。 |
| 交付项 | 执行规则 |
|---|---|
| 源文案 | 本 PRD 只交付中文和英文;中文用于产品理解与翻译参照 |
| UI 可见语言 | 当前版本的收起态、展开态通知 UI 只展示英文主文案和 CTA,以对应英文通知设计为准 |
| 后续翻译 | 不得改变模板 ID、触发类型、按钮含义、路由和 UI 绑定;翻译缺失时使用英文 |
| 动态变量 | 只读取客户端本地真实数据,不得使用固定虚假数量或由中台生成 |
3.6 R4:中台唯一控制#
中台只新增一个字段:notification_audience_mode(通知下放范围)。
| 值 | 中台含义 | 客户端行为 |
|---|---|---|
OFF |
全部关闭 | 中台不发送 Topic 唤醒;客户端所有恢复入口检查到该值后不生成新通知 |
ORGANIC_ONLY |
只给自然量用户下放 | 只有按现有来源口径识别为自然量的客户端允许运行通知调度 |
PAID_ONLY |
只给推广用户下放 | 只有按现有来源口径识别为推广用户的客户端允许运行通知调度 |
| 补充项 | 执行规则 |
|---|---|
| 状态范围 | 不存在“全部用户开启”状态 |
| 中台边界 | 不配置场景、文案、频控或路由 |
| 客户端判断 | 每次启动调度器前按该字段和本机现有用户来源判断;不匹配或无法归类时结束本轮 |
3.7 R5:FCM Topic 空消息与后台恢复#
3.7.1 Topic 联动#
| 环节 | 具体规则 |
|---|---|
| 客户端订阅 | 所有客户端订阅同一个统一唤醒 Topic;不按自然量/推广用户拆分 Topic,也不因用户来源变化切换 Topic |
| 中台发送 | OFF 不发送唤醒消息;ORGANIC_ONLY 和 PAID_ONLY 均向同一个统一唤醒 Topic 发送空数据消息,FCM 本身不筛选用户来源 |
| 消息内容 | 发送 data-only(只有数据、不由系统直接展示通知)的空值消息;仅保留 FCM 协议要求的空标识,不包含标题、正文、通知 ID、路由或用户数据 |
| 客户端收到 | 不直接显示远程通知;先读取 notification_audience_mode 并结合本机用户来源判断,匹配后才进入进程/服务恢复入口和本地调度器,不匹配则结束 |
| Token 边界 | Tidyvo 不向业务中台上传、绑定、保存或按用户查询 FCM Token;FCM SDK 为完成 Topic 订阅在 Firebase 内部使用设备注册令牌,不属于本需求的业务 Token 方案 |
| 失败边界 | 空消息只是唤醒尝试;App 被用户强制停止、系统限制后台或厂商省电策略拦截时,不能承诺一定拉活 |
3.7.2 Service / Job / WorkManager / Alarm#
| 能力 | 竞品已确认参数和作用 | Tidyvo 本次方案 |
|---|---|---|
| Foreground Service(前台服务) | START_STICKY,服务销毁或任务划掉后进入恢复链 |
作为常驻主入口;只启动统一调度器,不单独决定发哪条通知 |
| 快速 Job | minLatency=3999ms、deadline=5999ms |
前台服务启动失败后的 4—6 秒补拉入口 |
| WorkManager | 约 18 分钟 | 周期检查进程、服务和调度器;实际时间由 Android 决定 |
| 持久 Job | minLatency=1446000ms、deadline=1449999ms,Android 13+ priority 400 |
约 24 分钟心跳恢复入口 |
| Alarm | 延迟 28799365ms,约 8 小时 |
长周期恢复入口,使用非精确 Alarm |
| 开机/升级广播 | BOOT_COMPLETED、MY_PACKAGE_REPLACED |
开机或覆盖安装后重新安排 Service、Job、WorkManager 和 Alarm |
| FCM | 远程消息可进入恢复分支,服务端做法未确认 | 使用本 PRD 的 Topic 空数据消息进入同一恢复分支 |
| 共用要求 | 执行规则 |
|---|---|
| 入口职责 | 只负责恢复调度器,不各自生成通知 |
| 并发处理 | 并发到达时合并为一次调度 |
| 频控 | 执行第 3.3.1 节统一频控 |
3.8 R6:四类可见通知与统一广告点击链路#
3.8.1 四类可见通知#
| 产品分类 | 定义与展示 | 触发来源 | 点击目标 | 普通通知频控 |
|---|---|---|---|---|
| 普通通知 | 场景触发通知,包括 13 个周期场景和 4 个本地事件场景 | 客户端本地轮询或本地事件 | 对应场景的功能页面 | POLLING / STATE 执行每日 5 次和 15 分钟通用频控;EVENT 只执行同一事件 ID 60 秒间隔 |
| 常驻通知 | 前台服务持续展示的通知;展开后包含多个 Tidyvo 功能入口 | Foreground Service(前台服务) | 用户点击的具体功能入口 | 不纳入普通通知的轮询和单 ID 频控 |
| 通知清理通知 | Notification Cleaner 生成的汇总通知,展示已隐藏通知数量和来源 App 图标 | Notification Cleaner | Notification Cleaner 页面 | 不纳入普通通知的轮询和单 ID 频控 |
| FCM 定时通知 | 运营在 FCM 后台配置标题、正文、发送时间和目标页面,到点后远程下发的可见通知 | FCM 后台定时发送 | FCM 配置的目标页面 | 不纳入本地普通通知轮询和单 ID 频控 |
| 边界对象 | 执行规则 |
|---|---|
| FCM Topic 空数据消息 | 只用于尝试唤醒进程并恢复本地调度;不在通知栏展示,不属于四类可见通知,也没有用户点击和广告触发 |
3.8.2 统一广告点击链路#
四类可见通知均属于“通知召回+广告变现入口”,统一执行以下链路:
用户点击可见通知或常驻通知中的具体功能入口
→ 触发广告请求/展示链路
→ 广告关闭、展示失败或无填充
→ 进入该通知对应的功能页面
| 规则项 | 执行规则 |
|---|---|
| 广告异常 | 广告关闭、加载失败、展示失败或无填充时继续进入原定目标页面,不能用广告结果阻塞跳转 |
| 普通通知 | 进入该 ID 的固定页面 |
| 常驻通知 | 进入用户点击的具体功能入口 |
| 通知清理通知 | 进入 Notification Cleaner |
| FCM 定时通知 | 进入后台配置的目标页面 |
3.9 通知权限、点击与记录#
| 项目 | 规则 |
|---|---|
| 通知权限 | Android 13+ 未获得 POST_NOTIFICATIONS 时不展示通知;沿用 Tidyvo 现有按需申请入口,不在冷启动新增权限弹窗 |
| 点击路由 | 完成第 3.8.2 节广告链路后进入原定页面;页面不可达时回退 Home |
| 本地记录 | 至少保存通知分类、通知 ID、模板 ID、展示时间、点击时间、当日次数、上次展示时间和循环游标 |
| 中台数据边界 | 可以上报通知分类、ID、模板 ID、展示、点击、广告结果和来源类型;不得上传媒体名称、文件 URI、联系人、通知正文、FCM Token 或 Topic 成员明细 |
4. 验收标准#
| 序号 | 关联需求 | 验收标准 |
|---|---|---|
| 1 | R1 | 工程中只有一套 Tidyvo 通知方案,不存在 A/B 策略或策略比例。 |
| 2 | R1 | 全局三态下放范围、轮询间隔、POLLING / STATE 的统一单 ID 日上限与统一单 ID 间隔、EVENT 的内置 60 秒间隔之外,不存在竞品 99/12/2/repetitions/max_visible 等额外执行频控。 |
| 3 | R1 | 调度器默认每 2 分钟进入一次候选检查;一次轮询最多显示 1 条,候选不合格时允许本轮不展示。 |
| 4 | R1 | 所有 POLLING / STATE ID 共用默认日上限 5 次和默认间隔 15 分钟;EVENT ID 14、15、16、17 不执行这两项,只执行客户端版本内置的同一事件 ID 60 秒间隔。 |
| 5 | R1 | 手机当地日期进入下一日后,各 POLLING / STATE ID 当日成功展示次数分别清零;候选未展示时不计日上限或间隔,EVENT 候选未展示时不启动或刷新 60 秒间隔。 |
| 6 | R1 | 并发恢复入口只合并为一次调度,不会在同一轮展示多条通知。 |
| 7 | R1 | 第 3.3.2 节竞品字段只作为参考,客户端和中台不得因该参考表自动新增对应控制项。 |
| 8 | R2 | 13 个周期 ID 按内置顺序循环检查,无数值优先级;ID 14、15、16、17 只由对应 Tidyvo 本地事件触发一次检查,ID 17 不参加周期循环;事件被受众、权限、60 秒间隔、数据或页面可用性拦截后不保存、不排队、不补发;新增文件未达到 30 MB 或无法取得大小时不会选中 14-B。 |
| 9 | R2 | 同时满足三个周期或状态场景时只展示 1 条,其余场景至少等待后续 2 分钟调度;一次本地事件回调包含多个新增项目时只检查一次,前一条事件未处理完成时到达的并发事件因无法取得处理锁而立即结束;同一文件或状态可在后续轮询或独立事件中命中另一个 ID,不执行跨 ID 去重或互斥。 |
| 10 | R2 | 13 个周期 ID 均按第 3.5.3 节执行总表定义的进入条件、数据来源、模板资格及跳过 / 重置条件执行;ID 1 只有在 24 小时内的有效成功扫描中至少两个指定功能模块为真实非 0 时合格;ID 9 只有在有效 Smart Clean 扫描结果中真实可清理量大于 0 时整组模板合格;ID 5 只有在 Private Space 至少存在 1 个有效文件时整组模板合格;ID 13 必须存在成功清理记录且不得用安装时长代替。候选数据或权限不可用时跳过且不计展示次数。 |
| 11 | R3 | 每个场景随客户端版本内置 1—8 套模板且不设置最低数量;任何场景不得内置第 9 套,中台不能在运行时新增、删除或修改模板。 |
| 12 | R3 | 每套模板均包含一条中英文主文案、行动按钮、固定路由、收起 UI、展开 UI 和功能视觉元素,不展示独立标题或正文;随机时整套选择,不发生跨模板混用。 |
| 13 | R3 | 同一场景的不同模板具有不同主文案和不同 UI;英文 CTA 含空格最多 10 个可见字符;收起状态展示小行动按钮,展开状态展示同文案的大行动按钮,且两种状态进入同一路由。 |
| 14 | R3 | 当前版本的收起态、展开态通知 UI 均只展示一条英文主文案和 CTA,并与对应英文通知设计一致;PRD 保留的中文主文案只用于产品理解与翻译参照,不存在 12 语言中台配置。 |
| 15 | R2、R3 | 带状态条件或动态变量的 STATE / EVENT 模板同时满足第 3.5.3 节执行总表中对应 ID 与模板条件后才进入候选池;清理满 24 小时后才显示“已经 1 天没有清理”,30 MB 大文件判断和 Android 低存储判断可验证,英文 1 Day / N Days、1 Notification / N Notifications 单复数正确,变量缺失时不显示占位符或虚假固定数值。 |
| 16 | R4 | 中台只有 OFF / ORGANIC_ONLY / PAID_ONLY 三态控制,没有“全量开启”,也没有通知规则、文案和频控配置页。 |
| 17 | R4 | 三种中台状态分别验证:全部不下放、仅自然量下放、仅推广用户下放;无法归类用户不收到。 |
| 18 | R5 | 所有客户端只订阅一个统一唤醒 Topic,不存在自然量/推广用户 Topic、来源切换订阅或业务 FCM Token 上传与绑定;空消息不含通知内容、ID 或路由。 |
| 19 | R5 | 统一 Topic 空消息到达时不直接展示远程通知;客户端先执行三态受众判断,只有来源匹配时才进入恢复链和本地调度器。 |
| 20 | R5 | Service、快速 Job、18 分钟 WorkManager、24 分钟持久 Job、8 小时 Alarm、开机/升级广播均可进入同一恢复入口;并发触发不会绕过 2 分钟轮询及 POLLING / STATE 的单 ID 频控。 |
| 21 | R5 | 强制停止或系统拦截时记录为“未唤醒/未验证”,不得宣称 FCM、Job 或 Alarm 可保证拉活。 |
| 22 | 全部 | 广告链路完成或失败后进入原定 Tidyvo 页面,异常路由回退 Home;请求和埋点不包含个人内容、其他 App 通知正文或真实 FCM Token。 |
| 23 | R6 | 产品侧只存在普通通知、常驻通知、通知清理通知、FCM 定时通知四类可见通知;ad_ntf 不作为 Tidyvo 产品分类。 |
| 24 | R6 | 点击四类中的任一可见通知时只触发一次广告链路;广告关闭、加载或展示失败、无填充时仍能进入正确目标页面。 |
| 25 | R6 | FCM Topic 空数据消息不展示通知、不触发广告;FCM 定时通知按后台配置的标题、正文、发送时间和目标页面形成可见通知。 |
| 26 | R6 | normal_ntf / res_ntf / filter_ntf 仅作为竞品技术标识分别对照普通通知、常驻通知、通知清理通知,不把竞品参数转成 Tidyvo 额外频控。 |
5. 修订记录#
| 修订日期 | 变更内容 | 影响范围 | 确认方式 |
|---|---|---|---|
| 2026-08-17 | 本地通知模板取消独立标题与正文,统一改为一条短主文案加 CTA;43 套中英文文案整体精简,英文 CTA 限制为含空格最多 10 个可见字符 | R2、R3、执行总表及验收标准 | 常老大确认 |
| 2026-08-17 | ID 9 改为只有存在真实可清理量时整组模板才参与;ID 5 改为只有 Private Space 存在有效文件时整组模板才参与,并更新 05-A 中英文文案 | R2、R3、执行总表及验收标准 | 常老大确认 |
| 2026-08-17 | 明确同一文件或状态允许在不同轮次命中不同 ID;每轮或每次事件检查仍最多展示 1 条,不做跨 ID 去重或互斥 | R2、验收标准 | 常老大确认 |
| 2026-08-17 | 拆分 ID 12“长时间未扫描”与 ID 13“有成功清理记录后的长期未清理”边界;将 ID 1 改为至少两个 Home 功能模块存在真实非 0 结果的综合召回;执行总表新增逐模板展示判断案例列 | R2、R3、执行总表及验收标准 | 常老大确认 |
| 2026-08-17 | 将 ID 17 从周期状态召回改为本地主动事件;周期 ID 调整为 13 个,事件 ID 调整为 4 个;为 ID 14—17 增加本地事件处理锁和同一事件 ID 60 秒成功展示间隔,并明确事件 ID 豁免每日 5 次和 15 分钟通用频控 | R1、R2、R6、执行总表及验收标准 | 常老大确认 |
| 2026-08-17 | 将调度、随机、UI、语言、中台、恢复与广告等长规则块改为表格化呈现,不改变已确认业务规则 | 全文呈现方式 | 常老大确认 |
| 2026-08-17 | 将场景 ID、候选规则、模板条件、中英文文案、路由和 UI 合并为逐模板唯一执行总表,删除散落的重复映射与阈值 | R2、R3、验收标准 | 常老大确认 |
| 2026-08-17 | 补齐 14 个周期 ID 的进入候选条件、数据来源、模板资格及跳过 / 重置规则,明确 POLLING 不是无条件展示 |
R2、验收标准 | 常老大明确要求 |
| 2026-08-14 | 统一英文通知 UI 口径;补齐状态模板阈值、英文动态文案单复数、事件拦截即结束、版本内置模板、30 MB 大文件标准与 Smart Clean 承接;调整 16-B 文案并补需求外链 |
R2、R3、验收标准及产品基本信息 | 常老大逐项确认 |
| 2026-08-14 | 将竞品 B 完整频控表改为仅供参考;Tidyvo 执行控制收口为全局三态下放、默认 2 分钟轮询、统一单 ID 日上限 5 次和统一单 ID 间隔 15 分钟 | R1、R2、R5 及验收标准 | 常老大确认 |
| 2026-08-14 | 合并产品决策记录:明确四类可见通知、统一广告点击链路、FCM 定时通知和竞品技术标识边界;删除重复描述线上 Notification Cleaner 的独立需求项 | R6、通知点击及验收标准 | 常老大确认 |
| 2026-08-14 | 启动 v1.0.6;按规范重命名 PRD,增加 1—8 套模板、不同 UI、收起/展开按钮、功能视觉元素和 STATE 状态召回通知 |
R2、R3 及验收标准 | 常老大确认 |
| 2026-08-14 | FCM 唤醒改为全体客户端共用一个 Topic,受众三态由客户端本地判断;删除重复的目标、方案、频控和点击说明 | R5、全局说明及验收标准 | 常老大确认 |