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-14 |
| 需求外链 | |
| 蓝湖外链 | |
| 冲突优先级 | 旧文档中的 A/B 分组、中台多字段通知配置、业务 FCM Token 绑定、文案权重/数值优先级和 12 语言交付均废止;通知需求以本 PRD 为准 |
2. 版本目标#
在 v1.0.6 中,参考竞品已确认机制,为 Tidyvo 落地一套无 A/B 的通知方案,覆盖中台三态受众控制、统一普通通知频控、1—8 套场景模板与状态召回、单 Topic 后台唤醒、四类可见通知及统一广告点击链路。
3. 本次范围及具体需求#
3.1 本次范围#
| 需求编号 | 本次做 | 本次不做 |
|---|---|---|
| R1 | Tidyvo 单套通知控制:全局三态下放、2 分钟轮询、统一单 ID 日上限 5 次、统一单 ID 间隔 15 分钟 | 不按通知 ID 分别配置 2/3/5 等不同上限,不照搬竞品 B 的其他频控参数 |
| R2 | 14 个周期 ID+3 个事件 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 次 |
所有普通通知 ID 共用该值,但每个 ID 独立计数;某 ID 当天展示满 5 次后,当天不再展示该 ID |
| 单 ID | default_interval_minutes(统一单 ID 间隔) |
默认 15 分钟 |
所有普通通知 ID 共用该值;只限制同一个 ID 的两次成功展示,不影响其他合格 ID 参加后续轮询 |
这四项是 Tidyvo 本次实际使用的全部通知控制。default_daily_limit 和 default_interval_minutes 是整套普通通知共用的默认值,不为每个 ID 分别提供配置。单 ID 日上限按手机当地日期 yyyyMMdd 独立统计,00:00 进入新自然日后分别清零;轮询失败或候选不合格不计入展示次数。
3.3.2 竞品 B 原始参数参考(不作为 Tidyvo 执行规则)#
下表只保留用于理解竞品,不表示 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。
3.4 R2:ID 循环、统一单 ID 频控与 Tidyvo 路由#
3.4.1 14 个周期 ID#
客户端按下表顺序组成循环列表,所有 ID 执行第 3.3.1 节统一频控。每次从上次停留位置继续检查,找到第一个合格 ID 后随机选择一套模板并展示,再将游标移到下一个 ID;若全部不合格,本轮不展示。
| 循环顺序 | ID | 竞品场景/路由 | Tidyvo 场景 | Tidyvo 点击目标 |
|---|---|---|---|---|
| 1 | 12 | 长时间未扫描 / photo |
长时间未检查存储 | Smart Clean |
| 2 | 10 | 已删除照片风险 / photo |
模糊照片检查 | Blurry |
| 3 | 13 | 长时间未清理 / junkcleaner |
长时间未清理存储 | Smart Clean |
| 4 | 1 | 首页综合召回 / home |
综合存储检查 | Home |
| 5 | 2 | 照片恢复 / photo |
重复/相似照片检查 | Duplicates |
| 6 | 9 | 垃圾清理 / junkcleaner |
Smart Clean 召回 | Smart Clean |
| 7 | 3 | 视频恢复 / video |
视频压缩 | Compress |
| 8 | 11 | 已删除文件风险 / home |
待清理项目确认 | To clean |
| 9 | 5 | 文档恢复 / document |
私密文件管理 | Private Space |
| 10 | 6 | 截图清理 / screenshot |
截图清理 | Screenshots |
| 11 | 7 | 联系人备份 / contacts |
重复联系人整理 | Contacts |
| 12 | 8 | 已恢复文件 / recoveryed |
清理记录回访 | Records |
| 13 | 17 | 通知清理 / noticlean |
通知清理召回 | Notification Cleaner |
| 14 | 18 | 大文件清理 / largeclean |
大文件/空间检查 | Smart Clean |
3.4.2 3 个事件 ID#
竞品 ID 14、15、16 不在上述普通 14 项轮询配置中,而是由本地事件触发。Tidyvo 只做产品能力替换,不声称替换后的事件就是竞品原始事件。
| ID | 竞品事件事实 | Tidyvo 对应事件 | 文案消费规则 | 点击目标 |
|---|---|---|---|---|
| 14 | 安装包安装后清理残留 | 检测到新增媒体或大文件 | 每次系统事件只生成 1 个候选,不自动重复 12 次 | Smart Clean |
| 15 | App 卸载后清理残留 | 一次清理完成后仍有 To clean 项目 | 每次完成事件只生成 1 个候选 | To clean |
| 16 | 新截图事件 | 检测到新截图 | 每次截图事件只生成 1 个候选 | Screenshots |
事件 ID 14、15、16 同样执行第 3.3.1 节控制。多个事件同时发生时不另建优先级;客户端只消费系统最先回调的一条,其余等待下一次调度。
3.4.3 状态召回通知(STATE)#
状态召回通知是普通通知的一种触发类型,不新增第五类产品通知。客户端只有在本地真实时间或功能状态满足条件时,才把对应模板加入本轮候选池。
| 状态场景 | 本地判断依据 | 可使用变量 | 示例 |
|---|---|---|---|
| 长时间未扫描 | 距离最近一次成功扫描达到模板阈值;首次无记录时使用安装时长 | {days_since_scan} |
已有 {days_since_scan} 天没有检查存储 |
| 长时间未清理 | 距离最近一次成功清理达到模板阈值 | {days_since_clean} |
已经 1 天没有清理 |
| 通知堆积 | 本机 Notification Cleaner 存在未读记录 | {count} |
有 {count} 条通知等待整理 |
| 存储状态 | Android 本机剩余空间或已完成扫描得到的文件信息满足模板条件 | {free_space}、{junk_size}、{largest_file_size} |
仅剩 {free_space} 可用空间 |
规则:
trigger_type = STATE只表示触发条件来自本地状态,展示仍执行第 3.3.1 节统一频控。- 天数按完整 24 小时计算;“已经 1 天没有清理”只在距离最近一次成功清理达到 24 小时后使用。
- 模板
13-C只在距离最近一次成功清理达到 24 小时且不足 48 小时时进入候选池;达到 48 小时后改用带真实{days_since_clean}的模板13-D。 {days_since_scan}和{days_since_clean}均按已过去的完整 24 小时向下取整,不能四舍五入或提前增加天数。- 天数、数量、空间和文件大小必须来自本机真实记录;没有可靠值时,该动态模板不参与随机,改从同场景无变量模板中选择。
- 清理、扫描成功后立即更新本地时间记录,后续轮询重新计算状态。
3.5 R3:同场景随机文案#
3.5.1 随机规则#
- 每个场景可配置
1—8套模板,不设置最低数量;常用功能可以配置更多,但任何场景都不得超过 8 套。 - 每套模板必须完整绑定“中文/英文标题+正文+行动按钮+固定路由+收起 UI+展开 UI+功能相关视觉元素”。
- 同一场景的不同模板必须同时使用不同文案和不同通知 UI,不能只换文字;UI 中必须出现与场景相关的图片、图标、数量卡片或状态图形。
- 同一 ID 有
N套合格模板时,客户端生成[0, N-1]的均匀随机整数,等概率选中一整套;禁止把 A 模板的文案与 B 模板的 UI、按钮或路由混合。 - 不配置权重,不记录轮播顺序,不要求上一条之后必须换模板,因此连续两次随机到同一套模板是正常结果。
- 带变量的模板只有在本机能取得真实变量且满足触发条件时才进入随机池;变量不可用时只在无变量模板中随机,通知中不得出现未替换的占位符。
- 每次成功展示只随机选择一次模板;Tidyvo 不采用竞品
repetitions=3的短间隔刷新规则。
3.5.2 收起与展开 UI#
| 状态 | 必须展示 | 行动按钮 | 交互 |
|---|---|---|---|
| 收起状态 | 标题、精简正文、当前模板的功能图片/图标/状态元素 | 小行动按钮,使用当前模板按钮文案 | 点击通知主体或小按钮,均进入该模板的统一广告点击链路和固定路由 |
| 展开状态 | 完整标题、完整正文、更醒目的功能图片/图标/状态卡片 | 大行动按钮,使用与收起状态相同的按钮文案 | 点击通知主体或大按钮,均进入该模板的统一广告点击链路和固定路由 |
同一模板的收起与展开状态必须保持相同文案含义、视觉主题和路由;展开不是生成一条新通知。不同模板的版式结构、视觉元素或信息重点必须明显不同。
3.5.3 中英文生产模板池#
| 模板 | ID | 触发类型 | 中文标题 | 中文正文 | 中文按钮 | English title | English body | English button | 路由 | 对应 UI / 功能元素 |
|---|---|---|---|---|---|---|---|---|---|---|
01-A |
1 | POLLING |
给存储做个快速体检 | 一次检查,看看哪些内容正在占用手机空间。 | 立即检查 | Give Your Storage a Quick Check | See what is taking up space on your phone. | Check Now | Home | UI-01-A:收起为存储仪表图标;展开为存储概览仪表盘 |
01-B |
1 | POLLING |
手机空间还能更清爽 | 打开 Tidyvo,快速整理常见存储问题。 | 打开 Tidyvo | Make More Room on Your Phone | Open Tidyvo for a quick storage cleanup. | Open Tidyvo | Home | UI-01-B:收起为手机闪光图标;展开为功能入口卡片组 |
02-A |
2 | POLLING |
相似照片正在悄悄占空间 | 找出相似照片,决定哪些值得保留。 | 查找相似照片 | Similar Photos May Be Taking Space | Find similar shots and decide which ones to keep. | Find Similar Photos | Duplicates | UI-02-A:收起为重叠照片图标;展开为相似照片叠层预览 |
02-B |
2 | POLLING |
好照片,只留最值得的 | 检查重复照片,减少不必要的相册占用。 | 检查重复项 | Keep the Shots That Matter | Review duplicate photos and reduce unnecessary clutter. | Review Duplicates | Duplicates | UI-02-B:收起为照片勾选图标;展开为保留/删除双栏卡片 |
02-C |
2 | POLLING |
相册该减负了 | 重复内容越积越多,现在整理更轻松。 | 整理相册 | Lighten Up Your Photo Library | Duplicate shots add up. A quick review can clear the clutter. | Organize Photos | Duplicates | UI-02-C:收起为照片堆叠图标;展开为相册网格和清理进度条 |
03-A |
3 | POLLING |
大视频占用空间很快 | 检查大视频,找到最值得压缩的内容。 | 查看大视频 | Large Videos Add Up Fast | Review large videos and find the best ones to compress. | View Large Videos | Compress | UI-03-A:收起为胶片大小标签;展开为视频列表和容量柱状图 |
03-B |
3 | POLLING |
保留回忆,缩小体积 | 压缩视频,减少空间占用,同时保留重要内容。 | 开始压缩 | Keep the Memory, Reduce the Size | Compress videos to save space while keeping what matters. | Start Compressing | Compress | UI-03-B:收起为压缩箭头图标;展开为压缩前后容量对比 |
05-A |
5 | POLLING |
给私密内容一个专属空间 | 将选中的照片和视频放入 Private Space。 | 打开私密空间 | A Private Place for Personal Files | Move selected photos and videos to Private Space. | Open Private Space | Private Space | UI-05-A:收起为锁定照片图标;展开为私密相册保险箱插图 |
05-B |
5 | POLLING |
你的私密文件值得再检查 | 查看 Private Space,确认重要内容已妥善整理。 | 查看私密文件 | Review Your Private Files | Open Private Space and make sure important files are organized. | Review Private Files | Private Space | UI-05-B:收起为盾牌文件夹图标;展开为加密文件网格 |
06-A |
6 | POLLING |
截图越积越多了 | 旧截图很容易被遗忘,现在整理正合适。 | 查看截图 | Screenshots Are Piling Up | Old screenshots are easy to forget. Now is a good time to review them. | View Screenshots | Screenshots | UI-06-A:收起为截图叠层图标;展开为截图拼贴预览 |
06-B |
6 | POLLING |
给截图文件夹减减负 | 清掉不再需要的截图,让相册更清爽。 | 清理截图 | Lighten Up Your Screenshots | Remove screenshots you no longer need and tidy your gallery. | Clean Screenshots | Screenshots | UI-06-B:收起为裁剪框图标;展开为截图时间轴和删除区域 |
06-C |
6 | POLLING |
这些截图还需要吗? | 快速检查截图,重要的留下,其余的清理掉。 | 立即检查 | Do You Still Need These Screenshots? | Review them quickly, keep the useful ones, and clear the rest. | Review Now | Screenshots | UI-06-C:收起为问号截图图标;展开为保留/清理选择卡片 |
07-A |
7 | POLLING |
联系人可能重复了 | 检查重复联系人,避免同一个人出现多次。 | 检查联系人 | You May Have Duplicate Contacts | Review duplicate contacts and avoid repeated entries. | Check Contacts | Contacts | UI-07-A:收起为双人头像图标;展开为重复联系人合并卡片 |
07-B |
7 | POLLING |
让通讯录重新整齐 | 整理重复信息,保留一份清晰的联系人列表。 | 整理通讯录 | Tidy Up Your Contact List | Clean duplicate entries and keep one clear contact list. | Organize Contacts | Contacts | UI-07-B:收起为通讯录勾选图标;展开为整理前后联系人列表 |
08-A |
8 | POLLING |
最近清理了什么? | 查看近期清理记录,了解空间变化。 | 查看记录 | What Did You Clean Recently? | Review recent cleanup activity and see how storage changed. | View Records | Records | UI-08-A:收起为历史时钟图标;展开为清理时间轴 |
08-B |
8 | POLLING |
你的存储变化有记录 | 回顾最近处理过的内容和释放的空间。 | 查看详情 | Your Storage Changes Are Recorded | Review recent actions and the space you recovered. | View Details | Records | UI-08-B:收起为记录图表图标;展开为空间变化折线卡片 |
09-A |
9 | POLLING |
垃圾文件可能正在累积 | 快速检查缓存和临时内容,释放可用空间。 | 智能清理 | Junk Files May Be Building Up | Check cache and temporary files to free available space. | Smart Clean | Smart Clean | UI-09-A:收起为扫帚闪光图标;展开为垃圾分类卡片 |
09-B |
9 | POLLING |
手机需要一次轻量清理 | 用 Smart Clean 快速找出可处理的内容。 | 开始检查 | Your Phone Could Use a Quick Cleanup | Use Smart Clean to find items that may be safe to review. | Start Check | Smart Clean | UI-09-B:收起为手机清洁图标;展开为扫描雷达和建议列表 |
09-C |
9 | STATE |
发现 {junk_size} 可检查内容 |
已完成本地扫描,现在可以查看并选择要清理的项目。 | 释放空间 | {junk_size} Ready to Review |
A local scan found items you can review and choose to clean. | Free Up Space | Smart Clean | UI-09-C:收起为真实容量徽章;展开为容量环和分类占比 |
09-D |
9 | POLLING |
别让临时文件占满空间 | 定期检查无用内容,让可用空间保持充足。 | 立即整理 | Don’t Let Temporary Files Take Over | Review unnecessary files regularly and keep more space available. | Clean Up Now | Smart Clean | UI-09-D:收起为垃圾袋图标;展开为清理前后空间对比 |
10-A |
10 | POLLING |
模糊照片值得检查一下 | 找出画质不佳的照片,再决定是否保留。 | 查看模糊照片 | Blurry Photos Are Worth a Look | Find low-quality photos and decide what to keep. | View Blurry Photos | Blurry | UI-10-A:收起为模糊照片图标;展开为清晰/模糊对比图 |
10-B |
10 | POLLING |
别让低质量照片挤占相册 | 快速检查模糊内容,让相册更精简。 | 开始检查 | Don’t Let Blurry Shots Clutter Your Gallery | Review low-quality photos and keep your gallery focused. | Start Review | Blurry | UI-10-B:收起为放大镜照片图标;展开为画质检查网格 |
11-A |
11 | POLLING |
还有项目等待你的确认 | 选中的内容尚未处理,查看后再决定。 | 继续处理 | Items Are Waiting for Your Review | Selected items are still pending. Review them before taking action. | Continue Review | To clean | UI-11-A:收起为待处理托盘图标;展开为选中项目预览 |
11-B |
11 | POLLING |
最后一步还没完成 | 打开 To clean,完成剩余项目的确认。 | 完成检查 | One Last Step Remains | Open To clean and finish reviewing the remaining items. | Finish Review | To clean | UI-11-B:收起为清单图标;展开为待确认队列卡片 |
12-A |
12 | POLLING |
存储空间很久没检查了 | 一次快速扫描,可以发现最近新增的占用。 | 扫描存储 | Your Storage Hasn’t Been Checked Recently | A quick scan can reveal what has been added lately. | Scan Storage | Smart Clean | UI-12-A:收起为扫描雷达图标;展开为存储扫描面板 |
12-B |
12 | POLLING |
是时候再检查一次空间 | 打开 Smart Clean,看看手机最近发生了什么变化。 | 立即检查 | Time for Another Storage Check | Open Smart Clean and see what has changed on your phone. | Check Now | Smart Clean | UI-12-B:收起为日历扫描图标;展开为扫描周期时间线 |
12-C |
12 | STATE |
已有 {days_since_scan} 天没有检查存储 |
最近新增的内容可能正在占用更多空间。 | 现在扫描 | No Storage Check for {days_since_scan} Days |
New files may be taking up more space since your last scan. | Scan Now | Smart Clean | UI-12-C:收起为真实天数徽章;展开为未扫描天数计数卡 |
13-A |
13 | STATE |
手机存储该清理了 | 距离上次成功清理已经有一段时间,现在检查更轻松。 | 开始清理 | It’s Time to Clean Your Storage | It has been a while since your last cleanup. A quick check can help. | Start Cleaning | Smart Clean | UI-13-A:收起为扫帚时钟图标;展开为清理周期卡片 |
13-B |
13 | STATE |
可用空间正在减少 | 查看最近积累的内容,及时释放空间。 | 检查空间 | Available Space Is Shrinking | Review recently added content and free space before it runs low. | Check Storage | Smart Clean | UI-13-B:收起为下降存储条;展开为存储占用仪表盘 |
13-C |
13 | STATE |
已经 1 天没有清理了 | 一天内新增的缓存和文件值得检查一下。 | 立即清理 | It’s Been 1 Day Since Your Last Cleanup | Cache and new files from the past day may be worth reviewing. | Clean Now | Smart Clean | UI-13-C:收起为“1 天”状态徽章;展开为 24 小时清理提醒卡 |
13-D |
13 | STATE |
已有 {days_since_clean} 天没有清理 |
越久不整理,临时内容越容易累积。 | 现在整理 | No Cleanup for {days_since_clean} Days |
Temporary files can build up the longer you wait. | Clean Up Now | Smart Clean | UI-13-D:收起为真实天数日历;展开为未清理时间轴 |
14-A |
14 | EVENT |
新内容刚刚加入手机 | 检查新增媒体,看看是否带来了新的空间占用。 | 检查新内容 | New Content Was Added | Review new media and see how it affected your storage. | Review New Items | Smart Clean | UI-14-A:收起为新增照片图标;展开为最近媒体预览 |
14-B |
14 | EVENT |
新的大文件可能需要处理 | 刚加入的文件可能占用较多空间,立即查看。 | 查看大文件 | A New Large File May Need Attention | A recently added file may be using significant storage. | View Large File | Smart Clean | UI-14-B:收起为新增大文件图标;展开为文件大小详情卡 |
15-A |
15 | EVENT |
清理完成,还有内容待确认 | 查看剩余项目,再决定是否继续处理。 | 查看剩余项目 | Cleanup Finished, Items Still Remain | Review the remaining items and decide what to do next. | Review Remaining | To clean | UI-15-A:收起为完成勾选加提示点;展开为剩余项目卡片 |
15-B |
15 | EVENT |
To clean 里还有待处理项目 | 别让已选内容一直等待,完成最后确认。 | 继续处理 | Items Are Still Waiting in To clean | Finish reviewing the files you already selected. | Continue | To clean | UI-15-B:收起为待处理文件夹;展开为 To clean 列表预览 |
16-A |
16 | EVENT |
新截图已保存 | 刚刚生成的截图现在可以检查。 | 查看新截图 | A New Screenshot Was Saved | Your latest screenshot is ready to review. | View Screenshot | Screenshots | UI-16-A:收起为新截图提示图标;展开为最新截图大预览 |
16-B |
16 | EVENT |
截图已累积到 {screenshot_count} 张 |
及时整理截图,避免它们持续占用相册空间。 | 整理截图 | You Now Have {screenshot_count} Screenshots |
Review them before they take up even more gallery space. | Organize Screenshots | Screenshots | UI-16-B:收起为真实数量徽章;展开为截图拼贴和数量卡 |
17-A |
17 | STATE |
{count} 条通知等待整理 |
把重要通知留下,其余内容集中处理。 | 整理通知 | {count} Notifications Need Attention |
Keep what matters and clear the rest in one place. | Organize Notifications | Notification Cleaner | UI-17-A:收起为带数量角标的铃铛;展开为来源 App 图标组 |
17-B |
17 | STATE |
通知栏是不是太拥挤了? | 整理堆积通知,让重要消息更容易看到。 | 清理通知栏 | Is Your Notification Bar Too Crowded? | Clear notification clutter so important alerts stand out. | Clean Notification Bar | Notification Cleaner | UI-17-B:收起为堆叠通知图标;展开为整理前后通知栏对比 |
17-C |
17 | STATE |
别让重要通知被淹没 | 集中查看未读通知,快速整理通知栏。 | 立即查看 | Don’t Let Important Alerts Get Buried | Review unread notifications and tidy your notification bar. | Review Now | Notification Cleaner | UI-17-C:收起为高亮收件箱图标;展开为未读来源网格 |
18-A |
18 | STATE |
仅剩 {free_space} 可用空间 |
空间继续减少前,先检查大文件和可清理内容。 | 检查空间 | Only {free_space} of Space Left |
Review large files and cleanable items before space runs lower. | Check Storage | Smart Clean | UI-18-A:收起为剩余空间警告环;展开为剩余空间仪表盘 |
18-B |
18 | STATE |
大文件正在挤占存储 | 找出占用最多的内容,决定从哪里开始整理。 | 查找大文件 | Large Files Are Taking Over | Find what uses the most space and decide where to start. | Find Large Files | Smart Clean | UI-18-B:收起为大文件图标;展开为文件大小排行 |
18-C |
18 | STATE |
最大文件达到 {largest_file_size} |
一个文件就可能占用大量空间,现在查看更直观。 | 查看最大文件 | Your Largest File Is {largest_file_size} |
One file may be using a large amount of storage. Review it now. | View Largest File | Smart Clean | UI-18-C:收起为真实大小标签;展开为最大文件详情和容量占比 |
本 PRD 只交付中文和英文源文案。开发翻译其他语言时不得改变模板 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 四类可见通知#
| 产品分类 | 定义与展示 | 触发来源 | 点击目标 | 普通通知频控 |
|---|---|---|---|---|
| 普通通知 | 场景触发通知,包括 14 个周期场景和 3 个本地事件场景 | 客户端本地轮询或本地事件 | 对应场景的功能页面 | 执行第 3.3.1 节统一频控 |
| 常驻通知 | 前台服务持续展示的通知;展开后包含多个 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 | 全局三态下放范围、轮询间隔、统一单 ID 日上限、统一单 ID 间隔之外,不存在竞品 99/12/2/repetitions/max_visible 等额外执行频控。 |
| 3 | R1 | 调度器默认每 2 分钟进入一次候选检查;一次轮询最多显示 1 条,候选不合格时允许本轮不展示。 |
| 4 | R1 | 所有普通通知 ID 共用默认日上限 5 次和默认间隔 15 分钟;不存在按 ID 分别设置 2/3/5 次或不同间隔的配置。 |
| 5 | R1 | 手机当地日期进入下一日后,各 ID 当日成功展示次数分别清零;轮询失败和未展示候选不计数。 |
| 6 | R1 | 并发恢复入口只合并为一次调度,不会在同一轮展示多条通知。 |
| 7 | R1 | 第 3.3.2 节竞品字段只作为参考,客户端和中台不得因该参考表自动新增对应控制项。 |
| 8 | R2 | 14 个周期 ID 按配置顺序循环检查,无数值优先级;ID 14、15、16 只由对应 Tidyvo 本地事件生成候选。 |
| 9 | R2 | 同时满足三个场景时只展示 1 条,其余场景至少等待后续 2 分钟调度。 |
| 10 | R3 | 每个场景可配置 1—8 套模板,不设置最低数量;任何场景配置第 9 套时校验失败。 |
| 11 | R3 | 每套模板均包含中英文标题、正文、行动按钮、固定路由、收起 UI、展开 UI 和功能视觉元素;随机时整套选择,不发生跨模板混用。 |
| 12 | R3 | 同一场景的不同模板具有不同文案和不同 UI;收起状态展示小行动按钮,展开状态展示同文案的大行动按钮,且两种状态进入同一路由。 |
| 13 | R3 | 中文系统展示中文源文案,英文系统展示英文源文案;其他语言由开发翻译,缺失时回退英文;不存在 12 语言中台配置。 |
| 14 | R2、R3 | STATE 模板只在本地真实状态满足时进入候选池;清理满 24 小时后才显示“已经 1 天没有清理”,变量缺失时不显示占位符或虚假固定数值。 |
| 15 | R4 | 中台只有 OFF / ORGANIC_ONLY / PAID_ONLY 三态控制,没有“全量开启”,也没有通知规则、文案和频控配置页。 |
| 16 | R4 | 三种中台状态分别验证:全部不下放、仅自然量下放、仅推广用户下放;无法归类用户不收到。 |
| 17 | R5 | 所有客户端只订阅一个统一唤醒 Topic,不存在自然量/推广用户 Topic、来源切换订阅或业务 FCM Token 上传与绑定;空消息不含通知内容、ID 或路由。 |
| 18 | R5 | 统一 Topic 空消息到达时不直接展示远程通知;客户端先执行三态受众判断,只有来源匹配时才进入恢复链和本地调度器。 |
| 19 | R5 | Service、快速 Job、18 分钟 WorkManager、24 分钟持久 Job、8 小时 Alarm、开机/升级广播均可进入同一恢复入口;并发触发不会绕过 2 分钟轮询和单 ID 频控。 |
| 20 | R5 | 强制停止或系统拦截时记录为“未唤醒/未验证”,不得宣称 FCM、Job 或 Alarm 可保证拉活。 |
| 21 | 全部 | 广告链路完成或失败后进入原定 Tidyvo 页面,异常路由回退 Home;请求和埋点不包含个人内容、其他 App 通知正文或真实 FCM Token。 |
| 22 | R6 | 产品侧只存在普通通知、常驻通知、通知清理通知、FCM 定时通知四类可见通知;ad_ntf 不作为 Tidyvo 产品分类。 |
| 23 | R6 | 点击四类中的任一可见通知时只触发一次广告链路;广告关闭、加载或展示失败、无填充时仍能进入正确目标页面。 |
| 24 | R6 | FCM Topic 空数据消息不展示通知、不触发广告;FCM 定时通知按后台配置的标题、正文、发送时间和目标页面形成可见通知。 |
| 25 | R6 | normal_ntf / res_ntf / filter_ntf 仅作为竞品技术标识分别对照普通通知、常驻通知、通知清理通知,不把竞品参数转成 Tidyvo 额外频控。 |
5. 修订记录#
| 修订日期 | 变更内容 | 影响范围 | 确认方式 |
|---|---|---|---|
| 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、全局说明及验收标准 | 常老大确认 |