Tidyvo 具体通知方案
Tidyvo 具体通知方案返回统一总览

Tidyvo 基于线上 v1.0.5 的竞品同构通知系统具体执行方案#

产品:Tidyvo: Deep Storage Cleaner(桌面名称:Tidyvo Cleaner)
包名:com.tidyvo.cleaner
当前线上基线:v1.0.5;本方案不擅自指定下一 App 版本号,正式启动新版本时再写入对应 PRD
方案日期:2026-08-13
竞品基线:Photo Recovery V1.0.3
配置真源:Tidyvo 自有中台;FCM 负责消息送达与配置刷新
产品现状:Notification Cleaner 已在上一线上版本加入,本方案按现有能力继续配置,不重复定义为新增功能 协作边界:本文只定义产品需求、中台规则、通知文案和验收口径,不代表实现状态;Codex 不开发业务代码,具体实现由开发团队基于线上 v1.0.5 代码完成

1. 执行结论#

Tidyvo 按竞品相同的系统结构执行:

自有中台下发策略、素材和灰度
→ 客户端保存 Offline_A / Online_B 或远程策略组
→ Service / Job / WorkManager / Alarm / FCM 维持调度和恢复入口
→ 时间窗口内按全局间隔循环尝试
→ 检查全局上限、通知栏数量和单素材频控
→ 从当前可用场景中选择通知
→ 本地通知或 FCM 展示
→ 统一跳板记录点击并进入 Tidyvo 对应功能
→ 在启动、功能完成和退出节点承接现有广告链路

“全盘复刻竞品”指:完整保留竞品已确认的调度模型、两套策略、17 个通知 ID、四类通知、特殊通知属性、后台恢复链、Notification Cleaner 和广告转化结构。

结合 Tidyvo 产品时,只做必要的业务语义替换:竞品的照片/视频/文档“恢复”场景,映射为 Tidyvo 已具备的照片整理、视频压缩、私密空间、联系人、To clean 和通知清理场景;不下发 Tidyvo 实际无法承接的恢复承诺。

2. 当前能力基线#

模块 Tidyvo v1.0.5 现有/已确认能力 本方案使用方式
Home 存储状态、Smart Clean、六类媒体入口 综合召回、扫描、存储不足落地页
Duplicate photos 重复照片选择 照片整理场景
Similar photos 相似照片选择 照片整理场景
Blurry photos 模糊照片清理 照片整理场景
Screenshots 截图列表和清理 截图轮询与截图事件场景
Large photos 大照片复核 大文件/空间场景
Large videos 大视频复核 大文件/空间场景
To clean 用户选中内容的删除前汇总 待处理召回场景
Compress 视频压缩 视频场景
Contacts 重复联系人整理 联系人场景
Private Space 私密内容入口 隐私内容召回场景
Charging Animation 充电动画与后台通知 事件通知与高优先级展示能力复用
Storage Widget 桌面组件 长期曝光和回访入口
Records 操作历史 已处理内容召回场景
Notification Cleaner 已上线的通知清理、隐藏和历史能力 竞品 ID 17 和常驻监听链
FCM / 中台 按本方案补齐 Token、配置和消息闭环 即时通知、配置刷新和恢复入口

3. 后台策略组#

3.1 竞品同构基线#

字段 Offline_A Online_B 客户端含义
normal_enabled true true 普通通知总开关
upper_limit 5 99 统计周期内普通通知总上限
interval_time_minutes 30 2 全局循环尝试最短间隔
repetitions 1 3 同一素材允许重复次数
continuous_ntf_num 未确认 12 单轮连续通知数量
ntf_cooling_time_minutes 未确认 2 一轮后的冷却时间
max_visible_ntf 未确认 5 通知栏最大可见数
android_16_max_visible 未确认 1 Android 16 单独可见数
ad_ntf_upper_limit -1 -1 广告通知不设客户端上限

未确认值不得编造成竞品事实。Tidyvo 后台字段保留 null,由远程策略显式填写;不因为未确认而删除能力。

3.2 Tidyvo 首次发布配置#

首次发布必须同时建立 Offline_AOnline_B,两组均可直接分配用户。中台必须支持按以下条件分组:

  • 首个支持本方案的 App 版本及以上;具体版本号在常老大正式启动下一版本时写入对应 PRD;
  • 国家/地区;
  • App 当前语言;
  • Android 版本;
  • 厂商;
  • 安装时长;
  • 最后活跃时间;
  • Notification Cleaner 授权状态;
  • 远程百分比。

发布配置:

字段 初始值
master_switch true
emergency_stop false
strategy_group Offline_AOnline_B
start_time 08:00
end_time 21:30
timezone_mode device_local
min_install_age_minutes 5
require_post_notifications true
require_screen_on 后台可配
require_device_unlocked 后台可配
require_portrait 后台可配
future_when_days 非小米 365
fallback_locale en

4. 统一落地页契约#

中台对外使用以下产品级枚举;开发团队负责映射到线上 v1.0.5 的真实内部路由。本文不以本地 v1.0.0 代码中的路由名称判断线上实现。未知值、参数缺失、当前页面不存在或权限不足时回退 Home。

中台路由 Tidyvo 落地页 必要参数 无数据/无权限降级
home Home Home
smart_clean Smart Clean 结果或扫描 无有效缓存时先扫描
duplicates Duplicate photos 无权限先走媒体权限;无结果显示空态
similar Similar photos 同上
blurry Blurry photos 同上
screenshots Screenshots 同上
large_photos Large photos 同上
large_videos Large videos 同上
to_clean To clean 为空时显示现有空态
compress Compress 无视频权限先授权
contacts Contacts 无联系人权限先授权
private_space Private Space 进入现有解锁链
charging Charging Animation 进入现有说明页
widget Storage Widget 进入现有安装说明页
records Records 无记录显示现有空态
notification_cleaner Notification Cleaner 无通知使用权进入现有授权链
notification_access Notification Cleaner 权限说明 打开系统通知使用权设置
settings_notifications Settings 通知区域 Settings

5. 17 个通知 ID 的 Tidyvo 具体配置#

5.1 总表#

ID Tidyvo 场景 触发类型 触发条件 路由 单素材上限 单素材间隔 优先级
1 首页综合召回 轮询 已安装满5分钟,通知权限有效 home 5 15分钟 30
2 重复/相似照片 轮询 最近扫描存在重复或相似照片;无缓存时允许通用素材 duplicates / similar 5 15分钟 70
3 大视频与压缩 轮询 存在大视频或最近使用过 Compress;无缓存时允许通用素材 large_videos / compress 3 15分钟 65
5 私密空间 轮询 Private Space 可用 private_space 3 15分钟 45
6 截图整理 轮询 最近扫描存在截图;无缓存时允许通用素材 screenshots 2 15分钟 75
7 联系人整理 轮询 Contacts 功能可用 contacts 3 15分钟 50
8 已处理内容/记录 轮询 Records 存在历史;无记录时回退 Home records 2 15分钟 35
9 Smart Clean 主池 轮询 Smart Clean 可用;允许固定宣称素材 smart_clean 5 15分钟 80
10 模糊照片提醒 轮询 最近扫描存在模糊照片;无缓存时允许通用素材 blurry 3 15分钟 72
11 To clean 待确认 轮询 To clean 有项目;无项目时使用首页综合素材 to_clean / home 5 15分钟 90
12 长时间未扫描 轮询 距离最近一次扫描达到后台变量 {days};首次无记录用安装时长 smart_clean 3 15分钟 55
13 长时间未清理/容量 轮询 距离最近一次成功清理达到 {days},或存储达到 {used_percent} smart_clean 3 15分钟 85
17 Notification Cleaner 轮询 已授权且本地通知历史存在记录;或使用通用通知过载素材 notification_cleaner 2 15分钟 88
18 大文件/空间不足 轮询 存在大照片/大视频,或系统剩余空间低 large_videos / large_photos 3 15分钟 95
14 新增媒体/文件事件 事件 MediaStore 观察到新增媒体或大文件;用 Tidyvo 等价事件替换竞品 APK 安装包事件 smart_clean 后台可配 事件触发 78
15 删除后残留待确认 事件 删除/清理结束后 To clean 或扫描仍有待处理项;用 Tidyvo 等价事件替换竞品卸载残留事件 to_clean 后台可配 事件触发 92
16 新截图事件 事件 MediaStore 观察到新截图,达到事件阈值 screenshots 后台可配 事件触发 82

5.2 选择顺序#

每次循环只选择当前优先级最高的一条合格素材:

ID 18 空间/大文件
→ ID 15 删除后仍有待处理
→ ID 11 To clean
→ ID 17 Notification Cleaner
→ ID 13 长时间未清理
→ ID 16 新截图
→ ID 9 Smart Clean
→ ID 14 新增媒体
→ ID 6 截图
→ ID 10 模糊照片
→ ID 2 重复/相似照片
→ ID 3 大视频/压缩
→ ID 12 长时间未扫描
→ ID 7 联系人
→ ID 5 私密空间
→ ID 8 Records
→ ID 1 首页综合召回

这个顺序是 Tidyvo 的业务映射规则,不声称是竞品代码已确认的选择顺序;它只负责在竞品同构调度器中决定 Tidyvo 场景优先级。

5.3 逐 ID 执行规则#

ID 准入与数据选择 排除/停发 模板池 点击与广告承接
1 安装满5分钟、通知权限有效、当前没有更高优先级场景;不依赖扫描数据 总开关关闭、达到全局或素材上限、超出时段 TIDY_01_* 进入 Home;按线上广告层执行通知唤醒的启动广告判断
2 优先选择有最新结果且容量更大的 Duplicate 或 Similar;无最新结果仍可使用无变量素材 媒体权限不可用时允许展示,但点击后先进入现有权限链;同素材冷却时换素材 TIDY_02_* 进入 Duplicate/Similar;进入列表后承接现有原生广告,操作结果承接现有插屏判断
3 有大视频时进入 Large Videos;否则进入 Compress;允许无变量通用素材 当前设备不支持对应视频处理时回退 Home TIDY_03_* 大视频列表或 Compress;压缩完成/退出按现有广告层请求广告
5 Private Space 为线上可用功能时准入;无需读取私密内容数量 功能被中台关闭或设备不可用时不选该 ID TIDY_05_* 进入 Private Space 现有解锁链;禁止通知携带私密文件信息
6 有截图扫描结果时优先;没有结果时仍可使用无变量素材 场景关闭、素材冷却或全局上限达到时停发 TIDY_06_* 进入 Screenshots;列表和操作结果承接现有广告逻辑
7 Contacts 功能存在即可;不要求预先读取联系人内容 功能关闭或设备不支持联系人能力时不发 TIDY_07_* 进入 Contacts;无权限走现有授权,通知和中台不携带联系人数据
8 Records 有记录时优先;无记录可使用无变量素材但点击回退 Home Records 功能关闭时不发 TIDY_08_* 有记录进入 Records,无记录进入 Home;退出按现有广告逻辑判断
9 作为 Smart Clean 主召回池始终可参与;动态素材与固定宣称素材均可选 只受总开关、策略组、全局/素材频控和通知栏数量限制 TIDY_09_* 进入 Smart Clean;若需扫描先显示扫描,再进入结果与广告链
10 有 Blurry 结果时优先;无结果可用无变量素材 媒体能力不可用时点击先走权限链 TIDY_10_* 进入 Blurry;操作完成和退出承接现有广告逻辑
11 To clean 有项目时填 {count};为空时改用无变量素材并把路由设为 Home 用户完成删除、清空选择或本地数据失效后变量素材立即失效 TIDY_11_* 有项目进入 To clean;删除完成进入现有报告并承接完成广告
12 最近扫描时间存在时计算 {days};没有记录时按安装时长计算并使用无变量素材 用户完成新扫描后,本轮旧变量素材失效,下一循环重新计算 TIDY_12_* 进入 Smart Clean 并启动/展示扫描结果
13 最近清理天数和存储使用率二选一;优先使用可用的动态变量,否则用无变量素材 用户完成清理后重新计算,不要求当天永久停发 TIDY_13_* 进入 Smart Clean;结果、清理完成和退出承接广告链
17 Notification Cleaner 已授权时读取本地历史数量;无数量或未授权时使用无变量素材 Notification Cleaner 中台开关关闭时停发;权限失效时路由改为权限说明 TIDY_17_* 已授权进入 Notification Cleaner,未授权进入现有授权链;退出请求现有 Notification Cleaner 广告场景
18 优先用真实剩余空间、扫描容量或最大类目;没有变量时使用 Large File Alert 存储状态恢复后重新计算,不补发已过期动态素材 TIDY_18_* 大视频优先,其次大照片,再次 Smart Clean;列表与退出承接广告逻辑
14 MediaStore 观察到新增媒体;达到中台配置的大小/数量阈值立即建立候选 事件过期、文件已不存在或已被处理时取消 TIDY_14_* 进入 Smart Clean;这是 Tidyvo 对竞品“安装包事件”的等价场景
15 删除/清理结束后重新扫描,仍存在 To clean 或推荐项时触发 剩余项目为0、用户已再次处理或事件超过有效期时取消 TIDY_15_* 进入 To clean;这是 Tidyvo 对竞品“卸载残留事件”的等价场景
16 观察到新截图并达到中台配置阈值;可选择固定100+素材 截图已删除、场景过期或达到素材上限时取消 TIDY_16_* 进入 Screenshots;列表和操作结果承接广告逻辑

5.4 统计周期和过期规则#

项目 规则
全局上限周期 按设备当地时间 00:00–23:59 统计,跨日重置
单素材上限周期 与全局周期一致;后台可为事件素材设置独立生命周期
轮询素材有效期 无变量素材默认到本统计周期结束;动态变量素材每次发送前重新校验
事件素材有效期 ID 14、15、16 默认2小时,后台可配置
通知栏数量 发送前读取 Tidyvo 当前活动通知数;达到策略上限时等待下一循环
用户清除通知 记录 notification_dismiss;常驻通知按竞品恢复链处理,普通通知继续服从下一循环
Force Stop 不承诺系统强停后仍能恢复;用户重新打开 App 后补齐调度链

5.5 广告承接规则#

节点 需求
通知冷启动 进入统一跳板并完成初始化后,调用线上广告层已有的启动广告判断;广告不可用时直接落地,不阻断通知点击
通知热启动 不重新创建业务状态;调用线上热启动广告判断后进入目标页
扫描完成 ID 2、6、9、10、12、13、18 进入扫描结果时请求现有结果广告场景
操作完成 删除、压缩、联系人合并等完成后请求线上现有完成广告场景
页面退出 Smart Clean、媒体列表、Compress、Contacts、Records、Notification Cleaner 退出时请求线上对应退出广告场景
原生广告 复用线上列表/结果页已有原生广告位置,不因通知入口重复插入第二套原生位
去重 同一次通知点击只产生一次启动广告判断和一次落地,不因 Activity 重建重复请求

5.6 每轮决策顺序#

客户端每次被任一调度入口唤起后,按固定顺序判断:

读取最后一份校验通过的中台配置
→ 检查 master_switch / emergency_stop
→ 检查当前 App 版本是否命中发布范围
→ 选择用户所属策略组
→ 检查当地时间窗口
→ 检查 POST_NOTIFICATIONS
→ 检查安装时长门槛
→ 检查全局 upper_limit 与 interval_time
→ 检查当前活动通知数
→ 收集当前合格的17个ID候选
→ 按第5.2节优先级排序
→ 检查候选ID的 upper_limit / interval
→ 检查模板语言、enabled、weight、repetitions
→ 校验动态变量;无效时切换同ID无变量模板
→ 生成对应 normal/ad/res/filter 通知
→ 保存通知ID、模板、策略组、展示时间和次数

任一步不满足时记录抑制原因;轮询通知等待下一循环,事件通知在有效期内等待下一可执行机会。

5.7 本地与服务端职责#

判断 执行位置
App 版本、国家、语言、灰度、策略组 中台下发,客户端校验
当前媒体数量、容量、To clean、Records、Notification Cleaner 数量 只在客户端本地判断
通知总开关、时段、频控、素材、路由、权重 中台配置,客户端执行
即时运营通知 中台通过 FCM 下发
配置更新 FCM 发送刷新信号,客户端再向中台取完整配置
本地周期通知 客户端调度;中台不能远程读取用户文件来替客户端判断
展示、点击、落地和转化埋点 客户端脱敏上报

6. 英文生产文案池#

英文为 fallback_locale,所有其他语言缺失或解析失败时使用本表。fixed_claim=true 的素材按竞品固定宣称方式保留,不要求本地实时扫描值。

模板 ID 通知 ID 标题 正文 变量/标记 路由
TIDY_01_A 1 View now Keep your storage organized with Tidyvo Cleaner. home
TIDY_01_B 1 Clean Now Open Tidyvo for a quick storage check. home
TIDY_02_A 2 View now Similar photos may be taking up your storage. similar
TIDY_02_B 2 Start Cleaning Review duplicate photos and keep the ones you want. duplicates
TIDY_03_A 3 View now Large videos may be using more space than you expect. large_videos
TIDY_03_B 3 Handle Now Compress videos to reduce their storage size. compress
TIDY_05_A 5 View now Keep selected photos and videos in Private Space. private_space
TIDY_05_B 5 Handle Now Review your private files in Tidyvo. private_space
TIDY_06_A 6 View now Clean up your screenshots regularly to make your phone run more smoothly! screenshots
TIDY_06_B 6 Clean Now Let’s clean up your screenshots! screenshots
TIDY_07_A 7 View now Duplicate contacts detected? Review and merge them now. contacts
TIDY_07_B 7 Handle Now Keep your contact list organized with Tidyvo. contacts
TIDY_08_A 8 View now Come see your recent cleanup records. records
TIDY_08_B 8 View now Your recent storage activity is ready to review. records
TIDY_09_A 9 Clean Now Junk Files Detected fixed_claim=true smart_clean
TIDY_09_B 9 Start Cleaning Too many junk files! Clean them up now! fixed_claim=true smart_clean
TIDY_09_C 9 Handle Now Junk files are slowing down your device. fixed_claim=true smart_clean
TIDY_09_D 9 Clean Now 1.8GB Junk Detected! Free Up Space Now → Speed Boost up to 35%↑ fixed_claim=true smart_clean
TIDY_09_E 9 Start Cleaning Deep Scan Complete! Junk Files Found - Tap to Eliminate Lag ➤ fixed_claim=true smart_clean
TIDY_09_F 9 Handle Now 23 Rarely Used Apps Detected! Uninstall to Free 8.5GB ➔ fixed_claim=true smart_clean
TIDY_10_A 10 View now Blurry photos are ready for your review. blurry
TIDY_10_B 10 Clean Now Review low-quality photos and choose what to remove. blurry
TIDY_11_A 11 Handle Now {count} selected items are still waiting for confirmation. {count} to_clean
TIDY_11_B 11 Clean Now Finish reviewing the items in To clean. to_clean
TIDY_12_A 12 View now You haven't scanned your storage for a long time. smart_clean
TIDY_12_B 12 Start Cleaning {days} days since your last storage scan. {days} smart_clean
TIDY_13_A 13 Clean Now You haven't cleaned up your phone junk for a long time. smart_clean
TIDY_13_B 13 Handle Now Storage {used_percent} full! Clear junk now. {used_percent} smart_clean
TIDY_13_C 13 Start Cleaning {days} days with no junk cleared! Clean now. {days} smart_clean
TIDY_14_A 14 Clean Now New media detected. Scan your storage now. smart_clean
TIDY_14_B 14 Handle Now A new large file may be taking up storage. smart_clean
TIDY_15_A 15 Clean Now Cleanup complete. Review the remaining items? to_clean
TIDY_15_B 15 Handle Now More selected files are waiting in To clean. to_clean
TIDY_16_A 16 Clean Now Clean 100+ Old Screenshots? Free up space with one tap. fixed_claim=true screenshots
TIDY_16_B 16 Start Cleaning New screenshots detected. Review them now. screenshots
TIDY_17_A 17 Clean Now {count} unread notifications! Manage notifications bar. {count} notification_cleaner
TIDY_17_B 17 Start Cleaning Notification overload? Declutter notifications now. notification_cleaner
TIDY_17_C 17 Handle Now Unread notifications! Manage notifications bar. notification_cleaner
TIDY_18_A 18 Clean Now Only {free_space} space left! Clear data now. {free_space} large_videos
TIDY_18_B 18 Start Cleaning {size} junk to be cleaned up! Clean junk instantly. {size} smart_clean
TIDY_18_C 18 Handle Now Large File Alert! large_videos

7. 文案选择和变量规则#

7.1 文案选择#

  1. 先按 App 当前语言筛选模板;没有对应语言时使用英语。
  2. 同一 ID 中只选择 enabled=true 且未超过自身频控的模板。
  3. weight 加权随机;首次录入时同一 ID 各模板权重平均。
  4. repetitions 控制同一模板可连续出现次数;超过后必须换该 ID 的其他模板。
  5. 模板全部冷却时跳过该 ID,继续选择下一优先级场景。

7.2 变量#

变量 来源 格式 缺失处理
{count} 本地扫描、To clean 或通知历史 本地化整数 换同 ID 无变量模板
{size} 本地扫描结果 MB / GB 自动格式化 换无变量模板
{free_space} 系统可用存储 MB / GB Large File Alert!
{used_percent} 系统存储使用率 本地化百分比 换无变量模板
{days} 本地最近扫描/清理时间 本地化整数 换无变量模板

fixed_claim=true 不读取本地变量,直接展示素材中固定数字。

8. Notification Cleaner 联动#

Notification Cleaner 已上线,本方案只补齐其与同构通知系统的联动:

环节 规则
权限状态 客户端记录 Notification access 是否有效
全局开关 保留已上线“通知隐藏”总开关
白名单 沿用线上版本现有白名单/逐 App 开关;若线上已按竞品约280包名实现,直接作为配置基线
通知处理 非 ongoing 且不在白名单的通知取消并写入本地历史
ID 17 条件 本地历史数量可用时填 {count};不可用时选择无变量模板
ID 17 路由 notification_cleaner
权限失效 点击路由降级到 notification_access
常驻通知 通知 ID 2084960406,竞品同构属性见第10章

8.1 权限需求#

权限/状态 产品要求
POST_NOTIFICATIONS 按竞品方式在首次冷启动完成基础初始化后直接请求;系统未授权时不展示普通通知
用户拒绝通知权限 不伪造授权成功;后续进入通知相关功能时可再次引导或打开系统设置
Notification access 沿用线上 v1.0.5 已有 Notification Cleaner 授权入口和页面,不重复新建功能
Notification access 已授权 启动通知监听、隐藏规则、本地历史和常驻恢复链
Notification access 被撤销 停止监听;ID 17 点击改进入已有权限说明/系统设置链
其他既有权限 Notification Cleaner 已上线,本方案不改动其现有权限顺序、页面和授权结果处理

权限状态只决定能否执行对应能力,不改变 Offline_A / Online_B、17个ID和文案池的建档范围。

9. FCM Token 与中台联动#

9.1 Token 注册#

App 首次获取或刷新 Token 后上传:

{
  "installation_id": "install_uuid",
  "fcm_token": "token",
  "app_version": "{current_app_version}",
  "platform": "android",
  "locale": "en",
  "country": "US",
  "timezone": "America/New_York",
  "notification_permission": true,
  "notification_access": true,
  "strategy_group": "Online_B"
}

9.2 两类消息#

即时通知:中台筛选 Token 后通过 FCM HTTP v1 发送完整通知和路由。

配置刷新:

{
  "type": "config_refresh",
  "config_version": "tidyvo-ntf-001"
}

客户端比较版本后从中台拉取完整配置,校验、保存并重新安排本地任务。

9.3 统一 payload#

{
  "message_id": "msg_uuid",
  "campaign_id": "campaign_id",
  "notification_id": "9",
  "template_id": "TIDY_09_D",
  "type": "ad_ntf",
  "route": "smart_clean",
  "config_version": "tidyvo-ntf-001",
  "expire_at": "1786636800000"
}

服务账号和 HTTP v1 凭证只存在服务端,不进入 APK、中台前端、Git 或配置 payload。

10. 四类通知与特殊属性#

类型 Tidyvo 用途 规则
normal_ntf ID 1~18 普通轮询/事件通知 使用策略组总上限和素材频控
ad_ntf 运营或广告召回素材 保留 -1 无上限能力和独立频道
res_ntf 大样式通知 支持 RemoteViews、放大数字/关键词和图片
filter_ntf Notification Cleaner 常驻通知 ongoing、no-clear、foreground-service

特殊属性:

属性 配置
非小米 when 当前时间加365天
删除动作 restart_foreground_service
自动取消 常驻通知 false
可见性 public
提醒 高优先级、声音、震动、灯光由频道配置
常驻通知 ID 2084960406
服务返回值 START_STICKY

11. 后台维持和恢复链#

能力 竞品同构参数 Tidyvo 职责
NotificationListenerService 系统绑定 Notification Cleaner 监听、取消和入库
前台 Service START_STICKY 常驻通知、通知调度与恢复中心
快速 Job 3999–5999ms Service 启动失败后的快速补拉
WorkManager 目标约18分钟 周期检查、配置同步和恢复入口
持久 Job 1446000–1449999ms 约24分钟心跳恢复
Alarm 28799365ms 约8小时长周期兜底
Boot receiver BOOT_COMPLETED 开机后重新安排链路
Update receiver MY_PACKAGE_REPLACED App 更新后重新安排链路
FCM normal / high 分支 即时通知、配置刷新和恢复入口
Activity resume App 进入前台 检查并补齐任务和配置

Android 及厂商系统可能延迟或限制这些能力;测试报告记录实际结果,但不删除对应实现。

12. 中台字段#

12.1 全局字段#

字段 类型
config_version string
master_switch boolean
emergency_stop boolean
strategy_group string
start_time / end_time local time
timezone_mode enum
upper_limit integer
interval_time_minutes integer
repetitions integer
continuous_ntf_num integer/null
ntf_cooling_time_minutes integer/null
max_visible_ntf integer/null
android_16_max_visible integer/null
ad_ntf_upper_limit integer
future_when_days integer

12.2 场景字段#

字段 类型
notification_id integer
enabled boolean
trigger_type interval / local_event / fcm
condition JSON rule
route enum
upper_limit integer
interval_minutes integer
priority integer
template_pool_id string
expire_minutes integer/null
notification_type normal_ntf / ad_ntf / res_ntf / filter_ntf

12.3 模板字段#

字段 类型
template_id string
notification_id integer
locale BCP 47 tag
title string
body string
route enum
variables string array
fixed_claim boolean
weight integer
enabled boolean

13. 埋点#

事件 关键字段
notification_eligible notification_id, strategy_group
notification_suppressed notification_id, reason
notification_scheduled notification_id, template_id
notification_shown notification_id, template_id, type
notification_open notification_id, template_id, route
notification_dismiss notification_id, template_id
notification_landing notification_id, route, result
notification_conversion notification_id, action
config_fetch config_version, result
service_restore source, result, elapsed_ms

Notification Cleaner 内容只在本机处理;埋点不上传通知标题、正文、发送者、验证码、图片或原始 PendingIntent。

14. 中台配置示例#

{
  "config_version": "tidyvo-ntf-001",
  "master_switch": true,
  "emergency_stop": false,
  "strategy_groups": {
    "Offline_A": {
      "upper_limit": 5,
      "interval_time_minutes": 30,
      "repetitions": 1,
      "ad_ntf_upper_limit": -1
    },
    "Online_B": {
      "upper_limit": 99,
      "interval_time_minutes": 2,
      "repetitions": 3,
      "continuous_ntf_num": 12,
      "ntf_cooling_time_minutes": 2,
      "max_visible_ntf": 5,
      "android_16_max_visible": 1,
      "ad_ntf_upper_limit": -1
    }
  },
  "assignment": {
    "strategy_group": "Online_B",
    "app_version_scope": "{feature_enabled_app_version}",
    "percentage": 100
  },
  "global_rule": {
    "start_time": "08:00",
    "end_time": "21:30",
    "timezone_mode": "device_local",
    "min_install_age_minutes": 5,
    "future_when_days": 365
  },
  "scenes": [
    {
      "notification_id": 17,
      "enabled": true,
      "trigger_type": "interval",
      "condition": {
        "notification_access": true,
        "notification_cleaner_enabled": true
      },
      "upper_limit": 2,
      "interval_minutes": 15,
      "priority": 88,
      "route": "notification_cleaner",
      "template_pool_id": "POOL_TIDY_17",
      "notification_type": "normal_ntf"
    }
  ]
}

15. 开发交付需求顺序#

本章只规定需求交付顺序,不执行开发。

  1. 开发团队以线上 v1.0.5 代码为唯一实现基线,不使用本地 v1.0.0 覆盖线上功能。
  2. 开发团队回填线上 Notification Cleaner 的真实内部路由、白名单、数据库和权限链映射;产品验收按本文行为,不按类名或代码结构验收。
  3. 中台提供策略、场景、模板、语言、灰度和回滚配置能力。
  4. 客户端支持配置解析、版本校验、本地缓存和失败兜底。
  5. 中台建立17个通知 ID及完整生产素材,并按确定语言范围导入多语言。
  6. 客户端提供统一通知跳板,并只接受第4章产品级落地页枚举。
  7. 完成 FCM Token 注册、配置刷新和即时通知需求。
  8. 完成 Service、Job、WorkManager、Alarm、开机/升级与 FCM 恢复链需求。
  9. 完成四类通知和特殊通知属性需求。
  10. 测试团队逐 ID、逐策略、逐语言和逐 ROM 验收。

16. 验收清单#

  • 开发团队确认实现基线为线上 v1.0.5,Notification Cleaner 现有能力未被旧代码覆盖。
  • Offline_A 和 Online_B 参数可由中台直接分配。
  • 17 个通知 ID 全部建档且各有 Tidyvo 场景、条件、路由和英文素材。
  • ID 14、15、16 能按 Tidyvo 等价本地事件触发。
  • App 12种现有语言均可选到对应文案,缺失时回退英语。
  • 全局、场景、素材、通知栏数量和重复次数同时生效。
  • Online_B 2分钟间隔、99条上限和广告 -1 能力可验证。
  • 统一跳板拒绝未知路由并回退 Home。
  • Notification Cleaner 权限、隐藏、历史、ID 17 和常驻服务形成闭环。
  • Service、快速 Job、18分钟 Work、24分钟 Job、8小时 Alarm、开机/升级和 FCM 均有测试结果。
  • 非小米未来365天时间戳和删除通知恢复服务按设备记录结果。
  • Token 刷新、解绑和失效清理可验证,APK及日志不暴露服务端凭证。
  • 每个 ID 验证展示、点击、落地、广告请求和埋点链路。
  • Pixel、Samsung、Xiaomi 至少各一台记录实际系统表现;未测设备明确标记未验证。
Photo Recovery V1.0.3 竞品逆向分析 · 2026-08-13