Storage Manager v1.0.5 拉活通知规则与文案全量报告#
文档日期:2026-10-14
“全量”指当前 APK 可静态还原的一方通知类型、规则、Channel、路由和本地资源文案;不包含服务端未来可下发的任意 FCM 标题/正文。
S1=静态事实,D1=真机事实,U=未验证。
一、结论先行#
- 通知分为三套:常驻前台通知 ID
1001、本地业务提醒 ID2000、FCM 简单通知 ID3001+。(S1) - App 首启后创建 12 个一方 Channel;FCM 通知到达时可再创建第 13 个
simple_notification_channel。(S1/D1) - 普通提醒由 FGS 每 60 秒检查;内置 release 配置对普通设备为首条 30 分钟、后续 45 分钟、三个 6 小时时段各最多 6 条,Samsung 为首条/后续均 60 分钟、各时段最多 2 条。(S1)
- 统一门禁还要求通知总开关和系统权限开启、屏幕亮且未锁、App 不在前台、当前时段有效、未横屏、未超时段上限,并满足首延迟/间隔。(S1)
- 本地提醒共 11 种样式编号:1-6、7-11;普通随机轮换只从 1-4 选,样式 5“久未清理”满足至少 1 天时优先且每天最多一次,6-11由卸载/电量/大文件/存储事件或代码调用触发。(S1)
- 本地提醒使用
setOngoing(true)和fullScreenIntent;用户删除后通过NotifyDeleteReceiver取消重复展示 Job。代码请求 Channel bypass DND(绕过勿扰),但真机系统最终均显示mBypassDnd=false。(S1/D1) - 资源提供英语和繁体中文 App 自有通知文案;简体中文资源目录没有这组 key,所以本轮简体中文设备上的通知相关文本会回退英语。(S1/D1)
二、通知类型、ID 与生命周期#
| 类型 | ID | 特征 | 点击落地 |
|---|---|---|---|
| Resident(常驻 FGS) | 1001 |
ongoing、category=service、折叠/展开 RemoteViews、无声 |
主点击 Junk Cleaner;快捷入口 Junk/App Manager/Battery |
| Local reminder(本地提醒) | 2000 |
ongoing、Heads-up、自定义折叠/展开/悬浮、fullScreenIntent | 按样式路由 Junk/App/Battery/Photo/Large/Storage |
| Uninstall(卸载残留) | 2000 |
recommendation、fullScreenIntent | Junk Cleaner |
| Battery charged/charging/low | 2000 |
高重要度、自定义电池布局、fullScreenIntent | Battery Info |
| FCM simple | 3001 起递增 |
autoCancel、服务端 title/body、BigText、系统默认提示 | SplashActivity |
证据:notification/ponmlkjihgfedcba.java:859-879,921-960,1102-1119、notification/zyxwvutsrqponmlkjihgfedcba.java:36-80。
三、Channel 全表#
| Channel ID | 名称 | Importance | 声音/灯/震动 | 用途 |
|---|---|---|---|---|
resident_notification_channel |
Resident Notification | 3 | 无声、无灯、无震动 | FGS 常驻 |
normal_notification_channel_style1 |
Quick Clean Alerts | 4 | 无声、红灯、零值震动数组 | 垃圾清理 |
normal_notification_channel_style2 |
App Management | 4 | 无声、蓝灯、零值震动数组 | RAM/App Manager |
normal_notification_channel_style3 |
Battery Optimization | 4 | 无声、绿灯、零值震动数组 | 电池消耗 |
normal_notification_channel_style4 |
Storage Optimization | 4 | 无声、紫灯、零值震动数组 | 照片压缩 |
normal_notification_channel_style5 |
System Maintenance | 4 | 无声、黄灯、零值震动数组 | 久未清理 |
uninstall_reminder_channel |
Uninstall Reminder | 4 | 无声、红灯、零值震动数组 | 卸载残留 |
battery_charged_channel |
Battery Charged Alerts | 4 | 无声、绿灯、零值震动数组 | 充满 |
battery_charging_channel |
Battery Charging Status | 4 | 无声、黄灯、零值震动数组 | 充电中 |
battery_low_power_channel |
Low Battery Warnings | 4 | 无声、红灯、零值震动数组 | 低电量 |
large_file_channel |
Large File Alerts | 4 | 无声、红灯、不震动 | 大文件 |
storage_channel |
Storage Alerts | 4 | 无声、红灯、不震动 | 存储不足 |
simple_notification_channel |
代码动态创建 | 4 | 系统默认、灯、震动 | FCM notification payload;本轮未创建 |
构建代码请求 setBypassDnd(true),但 Android/OEM 需要额外授权,真机 dumpsys notification 为 false;不能宣称实际绕过勿扰。(S1/D1)
四、release 通知配置#
来源:jadx/resources/res/raw/ss_notify_config_v2.json。
| 参数 | Default | Samsung |
|---|---|---|
batterystatus |
true | true |
uninstallstatus |
true | true |
reminderstatus |
false | false |
| 卸载提醒最小间隔 | 5 分钟 | 30 分钟 |
| 普通提醒首条延迟 | 30 分钟 | 60 分钟 |
| 普通提醒后续间隔 | 45 分钟 | 60 分钟 |
| 06:00-12:00 上限 | 6 | 2 |
| 12:00-18:00 上限 | 6 | 2 |
| 18:00-24:00 上限 | 6 | 2 |
| 低电量去抖 | 30 分钟 | 120 分钟 |
| 充电事件延迟 | 0.5 分钟 | 0.5 分钟 |
解析失败时的代码 fallback 是首条 30 分钟、间隔 45 分钟、三个时段各 4 条;它不同于 release JSON 的 Default 各 6 条。(S1,ad/abcdefghijklmnopqrstuvwx.java:120-143)
ss_notify_config_v2_test.json 中 Samsung 首条为 15 分钟、卸载 5 分钟、各时段最多 4 条,这是测试资源,不代表线上 release。
4.1 Remote Config 覆盖#
ss_notify_config_v2非空时整包替换本地 JSON;为空才回退 raw。- 解析时按
Build.MANUFACTURER选择samsung或default。 - 当前 Firebase 生产 payload 未抓取,线上实际值未知。(S1/U,
a0/n.java:224-255)
五、普通提醒统一规则#
每 60 秒执行一次检查:
| 顺序 | 门禁 | 行为 |
|---|---|---|
| 1 | notification_is_open + 系统通知权限 |
任一关闭则不展示 |
| 2 | clean_reminder_is_open |
关闭则不展示普通清理提醒 |
| 3 | referrer==7 且 reminderstatus=false |
阻断普通提醒;非 7 分支不受该字段阻断 |
| 4 | 屏幕状态 | 要求亮屏且未锁;由动态 Receiver 更新 |
| 5 | App 前后台 | App 在前台时不展示 |
| 6 | 时段 | 必须在配置的 06-12 / 12-18 / 18-24 之一 |
| 7 | 单时段计数 | 达到 max_count 则停止 |
| 8 | 屏幕方向 | 横屏不展示 |
| 9 | 时间间隔 | 首条满足 first_delay;后续满足 interval |
| 10 | 样式 | 久未清理样式 5 优先,否则从 1-4 排除最近两种后随机 |
证据:LongRunningService.java:200-343,350-373、notification/ponmlkjihgfedcba.java:248-270,297-389,442-459。(S1)
注意:reminderstatus=false 并不等于“所有用户都关闭普通提醒”;代码只在 referrer==7 分支检查它。当前 APK 在 utils/m1.java 中明确声明 SOURCE_ORGANIC=7,但未知 referrer、查询异常和超时也回退到 7;非 7 组除 Facebook/TikTok/Google/Kwai/Bigo 外,还包含 official/website/direct。因此下游准确分组是“自然/默认组 7”与“非 7 已识别来源组”,不能直接写成纯自然量与纯付费推广量。(S1)
六、11 种本地样式、文案与路由#
以下保留 APK 英语原文,包括语法和拼写问题。{size}、{count}、{percent}、{days}、{appName}、{battery} 为运行时变量。
| Style | 触发/选择 | 英语可见正文 | CTA | scan_type |
click type |
|---|---|---|---|---|---|
| 1 | 普通随机清理 | 来源 7/未逾期:Junk files detected, clean now!;其他逾期:{size} junk files found, clean now! |
Clean |
JUNK_CLEANER |
jc |
| 2 | 普通随机 App/RAM | 来源 7:View the {10-35} apps running in the background!;其他:Attention!RAM usage is reached {50-80}% ! |
Check |
APP_MANAGER |
am |
| 3 | 普通随机电池 | 来源 7:View the phone battery consumption recently;其他:Attention!{10-35} apps are draning your battery! |
View |
BATTERY_INFO |
bi |
| 4 | 普通随机压缩 | 来源 7/未逾期:Compress photo to save space.;其他逾期:Save {size} of space by compressing photo. |
Go |
PHOTO_COMPRESSION |
pc |
| 5 | 安装或上次清理 ≥1 天;每天最多一次 | Not cleaned in {days} days ! |
View |
JUNK_CLEANER |
ltc |
| 6 | 检测到外部 App 卸载且门禁满足 | {appName} uninstalled. Remove junk now! |
Clean |
UNINSTALL |
uninstall |
| 7 | 充满/charged | 中心显示估算时间 0min / {h}h{m}min,同时显示 {battery}% |
View |
BATTERY_INFO |
charged |
| 8 | 接入电源/charging | Charging + {battery}% |
View |
BATTERY_INFO |
charging |
| 9 | 低电量 | Low + {battery}% |
View |
BATTERY_INFO |
low |
| 10 | 大文件提醒调用 | 来源 7:Clean large videos for more space.;其他:Clean {size} of large files for more space. |
Clean |
LARGE_FILE |
lf |
| 11 | 存储提醒调用 | 来源 7:Manage storage space.;其他:Low storage, {percent}% full. Clean Now |
Clean Now |
空字符串 | storage 常量 |
代码证据:notification/ponmlkjihgfedcba.java:538-752,1130-1211。
6.1 Title 与 fallback#
- Style 1-4 的系统 title 分别复用对应基础文案;Style 5 title 为空;Style 10=
Large Files;Style 11=Storage。(S1) - RemoteViews 构建异常时 fallback:Title=
Daily Master,Body=Clean your device。(S1) - 卸载提醒 fallback:Title=
App Uninstalled - Clean Residual Files,Body=Clean residual files from {appName}。(S1) - Battery fallback:
Battery Fully Charged / Battery Charging / Low Battery Warning+Battery level: {n}%。(S1)
6.2 文案质量问题#
draning应为draining。(S1)Attention!使用全角感叹号,RAM 文案还会形成尾部空格加!。(S1)- Style 5 的
days是代码硬编码英语,即使资源切到繁体中文,也会出现未清理於 {n} days !的混合语言。(S1) - 多条数字(垃圾大小、App 数、RAM 百分比、压缩空间)由随机生成器产生,不一定对应实时扫描结果;其营销真实性需单独动态核验。(S1/I)
七、繁体中文资源全文#
APK 对上述一方 key 提供 values-zh-rTW:
| 场景 | 繁体中文资源/拼接结果 | CTA |
|---|---|---|
| 垃圾基础 | 檢測到垃圾文件,立即清理! |
清理 |
| 垃圾动态 | {size} 發現垃圾文件,立即清理! |
清理 |
| App/RAM 来源 7 | 查看 {10-35} apps 在後台運行! |
檢查 |
| App/RAM 其他 | 注意!內存使用已達上限 {50-80}% ! |
檢查 |
| 电池来源 7 | 查看最近的手機電池消耗 |
查看 |
| 电池其他 | 注意! {10-35} apps 正在消耗您的電池! |
查看 |
| 照片压缩基础 | 壓縮照片以節省空間。 |
前往 |
| 照片压缩动态 | 保存 {size} 空間通過壓縮照片。 |
前往 |
| 久未清理 | 未清理於 {days} days ! |
查看 |
| 卸载 | {appName} 已卸載。立即刪除垃圾! |
清理 |
| 充电 | 充電 + {battery}% |
查看 |
| 低电 | 低 + {battery}% |
查看 |
| 大文件基础 | 清理大型影片以釋放更多空間。 |
清理 |
| 大文件动态 | 清理 {size} 的大型檔案以釋放更多空間。 |
清理 |
| 存储基础 | 管理儲存空間。 |
立即清理 |
| 存储动态 | 儲存空間不足,已使用 {percent}%。立即清理 |
立即清理 |
资源路径:jadx/resources/res/values-zh-rTW/strings.xml。values-zh 与 values-zh-rCN 未包含这些 App 自有 key,因此简体中文会回退默认英语。(S1)
八、事件型通知规则#
8.1 App 卸载#
- 服务初始化
AppUninstallMonitor,检测外部应用卸载并跳过自身发起的卸载。(S1) - release 开关
uninstallstatus=true;Default 最小间隔 5 分钟,Samsung 30 分钟。(S1) NotifyConfigData.canUninstallNow()还要求当前电量满足电池规则、当前小时位于有效时段、当日该时段计数未满。(S1,NotifyConfigData.java:165-190)- 关键协程方法部分反编译失败,真实计数落点和 OEM 时序需真机卸载测试。(U)
8.2 电池/电源#
- 动态监听
BATTERY_CHANGED、连接/断开电源、低电与恢复事件。(S1) - 发布前检查总通知开关、系统权限和
battery_reminder_is_open。(S1) - Charged/Charging/Low 分别使用 style 7/8/9,并在成功后延迟约 1 秒继续流程。(S1)
low_battery_debounce_min为 Default 30 分钟、Samsung 120 分钟;power_event_delay_min均为 0.5 分钟。(S1)- release
batterystatus=true;低电量阈值相关反编译方法不完整,但配置模型以<20作为卸载提醒的电量保护判断。(S1/U)
九、点击路由与参数#
本地通知 PendingIntent 写入:
scan_type
show_notification_type
notification_id_to_cancel
notification_clicktype
Intent flags=268468224,目标 SplashActivity;异常 fallback flags=268435456。证据:notification/ponmlkjihgfedcba.java:1271-1294。(S1)
| Style | route |
|---|---|
| 1 / 5 | JUNK_CLEANER |
| 2 | APP_MANAGER |
| 3 / 7 / 8 / 9 | BATTERY_INFO |
| 4 | PHOTO_COMPRESSION |
| 6 | UNINSTALL(卸载通知构建的 full screen fallback 又指向 Junk Cleaner) |
| 10 | LARGE_FILE |
| 11 | 空 scan_type,由 Splash/Main 默认路径承接 |
常驻通知主点击去 Junk Cleaner,折叠和展开布局各有 Junk/App Manager/Battery 三个按钮。(S1/D1)
十、FCM 规则#
| payload | 行为 |
|---|---|
| High priority data | 记录事件并调用统一入口启动 FGS,data_start 标记为 FCM 来源 |
| Normal priority data | 只记录“priority downgraded”,不显式启动服务 |
| Notification payload | 以服务器 title/body 创建 simple_notification_channel 通知,ID 从 3001 递增 |
FCM title/body 完全由服务端决定,APK 只能还原 fallback 客户端,不可能列出“服务端全部文案”。本轮未发送受控 FCM。(S1/U)
十一、真机状态#
- 首启允许通知后立即出现常驻 ID
1001;系统通知面板可见三类快捷入口。(D1) - 12 个预建 Channel 已创建;系统没有
simple_notification_channel,说明本轮未走 FCM notification 构建。(D1) - Home 后、最近任务划卡后,ID
1001仍在。(D1) - Force Stop 后活动通知消失;Channel 仍保留是系统配置持久化,不是拉活。(D1)
- 本轮未等待 Samsung 首条 60 分钟窗口,未观察到 ID
2000;普通提醒样式与频控仅为静态结论。(U)
十二、风险与未验证#
setOngoing(true)+fullScreenIntent用于清理建议,可能被平台视为高打扰或不符合全屏意图使用预期;需以现行 Android/Play 政策专项审查。(S1/U)- 代码请求 bypass DND,但系统未授予;不同 OEM 行为未知。(D1/U)
- Remote Config 可完全改变频控和开关,release raw 不等于当前线上真值。(U)
- 卸载、充电、低电、长时间未清理、大文件与存储提醒均未逐场景动态触发。(U)
- 简体中文回退英语与繁体中文硬编码
days/apps混排,属于本地化质量问题。(S1)