# Keen PDF v1.0.5 保活通知需求

产品：Keen PDF · 平台：Android · 版本：v1.0.5 · 更新日期：2026-09-08

文档状态：通知需求重起草版，供整体审阅。本文按 Tidyvo v1.1.1 的单文档结构，统一定义通知规则、场景、模板、中英文文案、路由和后台字段；并结合本地 PDF、Clean、Recover 竞品的通知机制形成 Keen PDF 自有方案，不讨论未确认的技术实现。

## 1. 通知分类与适用范围

| 序号 | 规则 | 适用对象 | 已确认内容 | 后台控制 / 默认值 | 案例或说明 |
|---:|---|---|---|---|---|
| 1 | 三类可见通知 | 全部通知 | ①普通通知；②常驻通知；③FCM 可见通知。 | 不涉及 | 普通通知负责主动或事件召回；常驻通知和 FCM 可见通知各自执行独立规则。 |
| 2 | 普通通知子类 | 普通通知 | ①主动通知：Keen PDF 主动检查当前真实状态后生成；②被动通知：未完成任务、新增文件、删除、广告外跳、新增截图等真实事件发生后生成。 | 两类分别控制 | 每个普通场景只归入主动或被动其中一类。 |
| 3 | 两类独立通知 | 常驻通知、FCM 可见通知 | 两类通知不执行普通通知的主动/被动间隔、统一日上限、单场景日上限、候选竞争和普通通知栏上限；各自执行自身规则。Android 系统限制始终有效。 | 各自按自身规则控制 | 常驻通知跟随前台服务状态；FCM 可见通知按下发消息规则执行。 |

## 2. 展示前提与时间规则

| 序号 | 规则 | 适用对象 | 已确认内容 | 后台控制 / 默认值 | 案例或说明 |
|---:|---|---|---|---|---|
| 4 | 通知下放范围 | 主动通知、被动通知 | 仅支持 `OFF / ORGANIC_ONLY / PAID_ONLY` 三态。`OFF` 全部关闭；`ORGANIC_ONLY` 仅自然量用户生效；`PAID_ONLY` 仅推广用户生效；无法识别来源时不展示普通通知。 | 后台自定义参数；默认 `OFF` | 三态只控制普通通知。 |
| 5 | 首次通知延迟 | 主动通知、被动通知 | 从 App 安装时间起算；未达到首次通知延迟时不展示普通通知。正常升级不重新计时；卸载重装按新的安装时间重新计时；首次打开 App 不重新计时。 | 后台自定义参数；默认 5 分钟 | 用户安装 30 分钟后首次打开，不会把延迟重新计算为 0。 |
| 6 | 后台配置兜底 | 主动通知、被动通知 | 成功取得并校验通过的新配置后保存为有效配置。拉取失败、超时或内容异常时继续使用上一次有效配置；新安装且从未取得有效配置时，普通通知保持关闭。 | 固定兜底规则 | 已保存配置 A，本次拉取失败时继续使用 A。 |
| 7 | 统一展示前提 | 主动通知、被动通知 | 必须同时满足：①Keen PDF 处于后台；②屏幕已点亮且已解锁；③处于允许展示时间段；④Android 通知权限和对应渠道可用；⑤用户符合下放范围；⑥场景开关开启；⑦对应类型间隔、统一日上限和当前场景 ID 的单场景日上限均未达到限制；⑧主动场景不在冷却期内；⑨场景真实条件成立；⑩目标路由可安全打开。 | 各项按对应后台参数判断 | App 在前台时不展示普通通知。 |
| 8 | 熄屏与锁屏 | 主动通知、被动通知 | 熄屏或锁屏期间不展示普通通知。解锁后重新读取当前真实状态，不补发此前的一次性事件；仍存在且属于主动场景的状态可以重新成为主动候选。 | 不单独配置 | 锁屏期间发生的新增文件事件不补发；解锁后也不把该次 B02 事件转成主动通知。 |
| 9 | 展示时间段 | 主动通知、被动通知 | 按手机当地时间判断。被动事件发生在允许时间段外时，本次事件不顺延到下一时间段。 | 开始、结束时间由后台配置；默认 `08:00–22:00` | 23:00 的一次性事件不会在次日 08:00 补发。 |
| 10 | 通知权限时机 | 全部可见通知 | Android 13+ 不在 Splash（启动页）、冷启动或首次进入 Home 时直接申请。用户首次完成 PDF 创建、OCR 等核心任务后，在报告页展示通知价值说明；只有用户点击 `Enable Notifications（开启通知）` 后才调用系统权限。Settings 保留用户主动入口。 | 固定规则 | 用户选择 `Not Now（暂不开启）` 或拒绝权限后，不在后续冷启动自动重复申请。 |

## 3. 频控与候选选择

| 序号 | 规则 | 适用对象 | 已确认内容 | 后台控制 / 默认值 | 案例或说明 |
|---:|---|---|---|---|---|
| 11 | 主动轮询、场景间隔与顺序 | 全部主动场景 | 达到首次通知延迟，且 App 在后台、普通通知启用、通知权限和下放范围可用后，统一每 2 分钟启动一次主动轮询。所有主动场景共用同一个 15 分钟间隔参数值，不为单个场景配置不同数值；各场景 ID 分别记录最近一次成功投递时间并独立判断间隔。轮询维护一个场景游标，每轮从游标指向的场景开始，按主动场景 ID 升序依次检查，每个场景 ID 每轮最多检查一次，到最后一个场景后回到第一个场景；跳过关闭或不合格的场景，首个合格且成功投递的场景结束本轮，下轮从其下一个场景开始。若本轮没有任何主动场景成功投递，游标不变；轮询未命中或投递失败时，不更新场景间隔、日计数和模板轮换状态。 | `active_poll_interval_minutes` 默认 2 分钟；`default_interval_minutes` 默认 15 分钟 | Keen PDF 当前主动场景序列为 A01–A04。本轮从 A01 开始并由 A03 首先成功投递时，下轮直接从 A04 开始；A04 后回到 A01。 |
| 12 | 被动通知间隔 | 全部被动场景 | 所有被动场景共用一个成功投递间隔；任意被动通知成功投递后，其他被动场景也必须等待。被动间隔不占用主动间隔。 | 后台自定义；默认 10 秒  | B02 成功投递后，随后出现的 B03 仍受同一个被动间隔限制。 |
| 13 | 单次展示与优先级 | 主动通知、被动通知 | 同一检查时机最多展示 1 条普通通知；主动与被动同时合格时，被动优先。 | 固定规则 | 未完成任务与长期未使用同时合格时，先选择未完成任务。 |
| 14 | 场景选择与模板轮换 | 主动通知、被动通知 | 主动场景按规则 11 的场景游标顺序检查，不随机选择；同一时刻有多个被动场景合格时，从合格被动场景池等概率随机选择一个。选定场景后，从该场景本轮尚未投递的合格模板中等概率选择；本轮全部合格模板均已投递后，重新开始下一轮。场景存在两套及以上合格模板时，连续两次不得使用同一模板；仅剩一套合格模板时允许重复使用。模板不设置独立开关、间隔或日上限。 | 固定规则 | A04 首次使用 A04-A 后，下次 A04 成功投递时优先使用 A04-B；A04-A 和 A04-B 均已投递后开始新一轮，但不得连续两次使用同一模板。 |
| 15 | 事件去重与合并 | 被动通知 | 同一个真实事件因系统重复回调时只生成一个候选。不同真实事件默认不去重；仅当具体场景明确规定合并窗口或 `REPLACE` 时，按该场景规则合并。事件去重或合并不替代被动通知间隔、统一日上限和单场景日上限。 | 固定规则 | 同一次索引变化出现 3 次重复回调，只生成 1 个候选；B05 的连续截图按自身合并窗口处理。 |
| 16 | 普通通知统一日上限 | 主动通知、被动通知 | 全部主动和被动普通通知共用一个当地自然日总上限；所有成功投递合并计数，达到上限后当天不再投递任何普通通知。 | `scene_daily_limit` 默认每天 99 条 | 当天所有普通通知合计达到 99 条后，即使某个场景尚未达到自身日上限，也不能继续投递。 |
| 17 | 单场景日上限 | 每个普通场景 | 所有普通场景共用同一个单场景日上限参数值，不为不同场景配置不同数值；每个场景 ID 分别记录当天成功投递次数并独立判断上限。 | `default_daily_limit` 默认每个场景 ID 每天 5 条 | A01 当天达到 5 条后不再参与，但不影响尚未达到自身上限的其他场景；所有场景仍同时受规则 16 的统一日上限限制。 |
| 18 | 场景开关 | 每个普通场景 | 每个场景 ID 独立设置开关；关闭后该场景不进入候选池，不影响其他场景。开关属于场景 ID，模板不设置独立开关。 | 后台自定义参数；默认开启 | 关闭 A04 不影响 A01 继续参与；不能单独关闭 A01-A。 |
| 19 | 成功投递与计数 | 主动通知、被动通知 | 提交前再次确认权限和渠道；成功调用 Android 通知接口后视为成功投递。成功后同时更新对应间隔、当前场景 ID 的日计数、普通通知统一日计数和该场景的模板轮换状态；权限关闭、渠道关闭或创建失败时均不更新。成功投递不等于用户一定看见。 | 固定统计规则 | A01 成功投递后，A01 日计数和普通通知统一日计数同时加 1；用户未点击仍计入频控。 |
| 20 | 日计数清零 | 主动通知、被动通知 | 按手机当地自然日统计，当地时间进入次日 `00:00` 后，普通通知统一日计数和各场景 ID 的单场景日计数全部清零。 | 固定统计规则 | 常驻通知和 FCM 可见通知不计入这两层普通通知日上限。 |
| 21 | 主动场景冷却 | 全部主动场景 | 任一主动通知成功投递后，对应主动场景 ID 立即进入冷却期；冷却期内该场景不参与主动候选。所有主动场景共用同一个冷却参数值，但 A01–A04 分别记录最近一次成功投递时间并独立计时。未命中、投递失败或用户仅进入目标功能时不更新冷却时间。 | `active_scene_cooldown_hours` 默认 24 小时 | A01 成功投递后仅 A01 冷却 24 小时，A02–A04 仍可按各自条件参与；主动场景必须同时满足 15 分钟场景间隔和本规则冷却。 |
| 22 | 并发锁 | 主动通知、被动通知 | 同一时刻只允许一个普通通知决策流程；并发落选的检查立即结束，不排队、不补发。 | 固定规则 | 文件事件与主动检查同时到达时，只保留先获得决策锁的流程。 |

## 4. 通知栏与点击规则

| 序号 | 规则 | 适用对象 | 已确认内容 | 后台控制 / 默认值 | 案例或说明 |
|---:|---|---|---|---|---|
| 23 | 同场景覆盖与显示上限 | 当前通知栏中的普通通知 | 每个场景 ID 对应一个固定通知位置，同场景新通知更新或覆盖旧通知；不同场景达到显示上限时，覆盖当前最早展示的普通通知。常驻通知和 FCM 可见通知不占普通通知栏名额。 | 后台自定义普通通知最大可见数量；默认 1 条 | A01 新模板覆盖通知栏中原有 A01；A02 到达时覆盖当前最早的普通通知。 |
| 24 | 普通通知广告链路 | 主动通知、被动通知 | 用户点击普通通知后最多执行 1 次广告请求；广告关闭、加载失败、展示失败或无填充后，仍进入对应目标页面。广告外跳返回场景属于特例，点击后直接恢复原任务，不再次请求广告。 | 固定规则 | B04 点击后直接恢复任务，避免再次广告形成循环。 |
| 25 | 独立通知广告链路 | 常驻通知、FCM 可见通知 | 常驻通知点击后直接进入目标页，不先展示广告；FCM 可见通知是否展示广告由该条 FCM 配置决定，但最多请求 1 次且失败不能阻塞路由。 | FCM 随消息配置；常驻通知固定 | 常驻通知的快捷入口点击后直接进入对应功能。 |
| 26 | 点击路由 | 全部可见通知 | 普通通知进入场景指定页；常驻通知进入用户点击的具体功能；FCM 只能进入预置路由白名单。点击时重新验证目标状态，失效时进入对应功能首页。 | 普通通知随场景固定；FCM 由后台配置 | B03 对应文件已无法恢复时，点击进入 Recycle Bin，而不是打开失效文件。 |
| 27 | 数据边界 | 全部可见通知 | 通知标题、正文、PendingIntent、后台字段和埋点不得携带文件名、文件路径、URI、PDF/图片内容、OCR 文本或本地文档列表。 | 固定规则 | B05 只表达“刚才的截图”，不显示真实文件名或 URI。 |

## 5. 通知场景、模板、文案与路由

普通通知共 9 个场景组、28 套模板，其中主动通知 4 个场景、被动通知 5 个场景。一个场景对应一个真实状态或一组同源事件；同一场景可以配置多套模板，模板按附加条件进入候选池。

文案统一使用“真实触发或用户问题 + 立即可获得的结果 + 明确行动”的结构。主动功能发现可使用问题式表达，但不得暗示设备上存在未经验证的文件或风险。主文案优先保证通知折叠态可读，避免在一句话内堆叠多个问题、结果或功能；最终截断情况以目标机型真机验证为准。CTA 文案从中英文主文案中独立成列。Long CTA（长按钮文案）沿用当前 CTA 文案，最多 10 个字符；Short CTA（短按钮文案）供小按钮使用，英文必须只使用一个不超过 8 个字符的动作单词，不得使用工具名、页面名、结果状态或多词短语。如果 Long CTA 本身已是符合上述要求的同一动作单词，则只配置一条 CTA，由长、短按钮共同使用，不再重复配置近义词。各语言均按最终展示字符串独立计数，空格和标点计入字符数；长、短 CTA 按按钮规格固定选择，必须单行完整显示，不折行、不截断，不得等发生截断后再动态切换。不得在通知中展示文件名、路径、URI、PDF/图片内容或 OCR 文本；不得使用随机容量、虚假完成状态、文件损坏、文件过期或设备风险话术。

### 5.1 主动通知场景

| 顺序 / 场景 ID | 触发规则 | 模板及附加条件 | 中文文案 | English copy（英文文案） | CTA 文案 | 路由 | 案例 |
|---|---|---|---|---|---|---|---|
| A01｜长期未使用 | 距离最近一次进入 App 前台满 3、7、15 或 30 天；每个时间点只形成一次候选；用户重新进入前台后重新计算。 | A01-A｜满 3 天 | 主文案：有 PDF 要处理？常用工具都在这里 | Copy: Need a PDF Tool? Open Keen PDF | Long CTA: Open App（打开应用）<br>Short CTA: Open（打开） | Home | 满 3 天只形成一次候选，第 4 天不重复。 |
| A01｜长期未使用 | 同上 | A01-B｜满 7 天 | 主文案：扫描、OCR、合并，打开即可使用 | Copy: Scan, OCR, and Merge in One Place | Long CTA: Open App（打开应用）<br>Short CTA: Open（打开） | Home | 用户连续 7 天未进入 App。 |
| A01｜长期未使用 | 同上 | A01-C｜满 15 天 | 主文案：把图片或纸质文档转成 PDF | Copy: Turn Photos or Paper into a PDF | Long CTA: Open Tools（打开工具）<br>Short CTA: Open（打开） | Home | 用户连续 15 天未进入 App。 |
| A01｜长期未使用 | 同上 | A01-D｜满 30 天 | 主文案：扫描、阅读、合并或拆分 PDF | Copy: Scan, Read, Merge, or Split PDFs | Long CTA: Open App（打开应用）<br>Short CTA: Open（打开） | Home | 用户连续 30 天未进入 App。 |
| A02｜未使用核心工具 | 用户至少使用过 1 次主要功能；主要功能包括 Scan、OCR、Image to PDF、Merge、Split 和 Page Edit。当前仍有可用且从未使用的主要功能时，从对应模板中选择 1 个。每个功能模板每次安装最多成功投递一次；A02 成功投递满 24 小时，且用户在此期间至少重新进入过 App 1 次，才允许推荐下一个功能，不要求再次使用或完成主要功能。全部主要功能均已使用或全部模板均已成功投递后，场景永久结束。 | A02-A｜Scan 从未使用 | 主文案：纸质文档要保存？扫描后直接生成 PDF | Copy: Scan Paper Documents into PDFs | Long CTA: Start Scan（开始扫描）<br>Short CTA: Scan（扫描） | Scan Camera | 用户使用过其他主要功能但从未使用 Scan；A02 上次成功投递已满 24 小时，且用户期间重新进入过 App。 |
| A02｜未使用核心工具 | 同上 | A02-B｜OCR 从未使用 | 主文案：图片里的文字不好复制？用 OCR 提取 | Copy: Extract Text from Images with OCR | Long CTA: Run OCR（提取文字）<br>Short CTA: Convert（转换） | OCR 来源选择 | 点击后不自动选择用户文件。 |
| A02｜未使用核心工具 | 同上 | A02-C｜Image to PDF 从未使用 | 主文案：多张图片不好分享？合成一份 PDF | Copy: Turn Multiple Photos into One PDF | Long CTA: Create PDF（创建 PDF）<br>Short CTA: Create（创建） | Image to PDF | 点击进入图片选择前的功能入口。 |
| A02｜未使用核心工具 | 同上 | A02-D｜Merge 从未使用 | 主文案：多份 PDF 太零散？合并成一个文件 | Copy: Merge Multiple PDFs into One File | Long CTA: Merge PDFs（合并 PDF）<br>Short CTA: Merge（合并） | Merge PDF | 点击进入选文件入口，不自动勾选文件。 |
| A02｜未使用核心工具 | 同上 | A02-E｜Split 从未使用 | 主文案：只需要部分页面？拆分 PDF 更方便 | Copy: Split a PDF to Keep the Pages You Need | Long CTA: Split PDF（拆分 PDF）<br>Short CTA: Split（拆分） | Split PDF | 点击进入选文件入口。 |
| A02｜未使用核心工具 | 同上 | A02-F｜Page Edit 从未使用 | 主文案：PDF 页面顺序不对？重新排序或旋转 | Copy: Reorder or Rotate PDF Pages | Long CTA: Edit Pages（编辑页面）<br>Short CTA: Edit（编辑） | Page Edit 选文件入口 | 只表示页面排序、旋转、删除和提取，不表示正文编辑。 |
| A03｜Widget 未添加 | 用户每次成功完成 1 次核心任务；当前未添加任何 Keen PDF Widget；本次安装内 A03 尚未成功投递过通知。A03 成功投递 1 次后，本次安装内不再提醒。 | A03-A｜场景成立即可参与 | 主文案：常用 PDF 工具放到桌面，一点就能打开 | Copy: Put PDF Tools on Your Home Screen | Long CTA: Add Widget（添加小组件）<br>Short CTA: Add（添加） | Widgets 二级页的添加入口 | 添加任意 Keen PDF Widget 后场景永久结束。 |
| A03｜Widget 未添加 | 同上 | A03-B｜场景成立即可参与 | 主文案：少一步操作，直接从桌面打开 PDF 工具 | Copy: Open Your PDF Tools in One Tap | Long CTA: Add Widget（添加小组件）<br>Short CTA: Add（添加） | Widgets 二级页 | 后续删除 Widget 不再次提醒。 |
| A04｜版本更新 | Google Play 返回 `UPDATE_AVAILABLE`，且可用 `versionCode` 高于当前版本；根据后台的冷却时间，候选检查读取最近一次有效结果；当天未成功提醒。 | A04-A｜真实存在更高版本 | 主文案：Keen PDF 新版本可以更新了 | Copy: A New Keen PDF Version Is Ready | Long CTA: Update Now（立即更新）<br>Short CTA: Update（更新） | Google Play App 页；不可用时进入网页商店，再失败回 Home | 查询失败、缓存过期或没有更高版本时不展示。 |
| A04｜版本更新 | 同上 | A04-B｜真实存在更高版本 | 主文案：获取最新版 Keen PDF | Copy: Get the Latest Keen PDF Version | Long CTA: Update Now（前往更新）<br>Short CTA: Update（更新） | 同上 | 每天最多成功投递 1 次。 |

### 5.2 被动通知场景

| 顺序 / 场景 ID | 触发规则 | 模板及附加条件 | 中文文案 | English copy（英文文案） | CTA 文案 | 路由 | 案例 |
|---|---|---|---|---|---|---|---|
| B01｜未完成任务 | App 从对应功能进入后台；任务包含可恢复输入；用唯一延时任务按 `REPLACE` 重排；默认离开 1 分钟后检查。用户返回、完成、取消或状态失效时取消资格。 | B01-A｜Scan 至少已有 1 个拍摄页面 | 主文案：已扫描页面还在，继续创建 PDF | Copy: Your Scanned Pages Are Waiting | CTA: Continue（继续） | 原 Scan 任务；状态丢失时进入 Scan Camera | 用户拍摄 2 页后离开，1 分钟仍未返回。 |
| B01｜未完成任务 | 同上 | B01-B｜OCR 至少已有 1 页来源 | 主文案：文字提取还没完成，继续处理 | Copy: Your OCR Task Is Waiting | Long CTA: Resume OCR（继续 OCR）<br>Short CTA: Resume（继续） | 原 OCR 任务；失效时进入 OCR 来源选择 | OCR 结果已失效时不展示成功话术。 |
| B01｜未完成任务 | 同上 | B01-C｜Image to PDF 至少已选 1 张图片 | 主文案：已选图片还在，继续生成 PDF | Copy: Your Selected Images Are Waiting | Long CTA: Finish PDF（继续创建）<br>Short CTA: Create（创建） | 原 Image to PDF 任务；失效时进入功能入口 | 用户返回 App 后立即取消通知资格。 |
| B01｜未完成任务 | 同上 | B01-D｜Merge 至少已选 2 个 PDF | 主文案：已选 PDF 准备好了，继续合并 | Copy: Your Selected PDFs Are Ready to Merge | Long CTA: Merge Now（继续合并）<br>Short CTA: Merge（合并） | 原 Merge 任务；失效时进入 Merge PDF | 用户选择 3 个 PDF 后离开。 |
| B01｜未完成任务 | 同上 | B01-E｜Split 已载入可拆分 PDF | 主文案：PDF 已载入，继续选择需要的页面 | Copy: Your PDF Is Ready to Split | CTA: Continue（继续） | 原 Split 任务；失效时进入 Split PDF | 来源文件不可读时场景失效。 |
| B01｜未完成任务 | 同上 | B01-F｜Page Edit 已载入 PDF 且存在有效编辑状态 | 主文案：页面调整还没完成，继续编辑 | Copy: Your PDF Page Edits Are Waiting | Long CTA: Edit Pages（继续编辑）<br>Short CTA: Edit（编辑） | 原 Page Edit 任务；失效时进入选文件入口 | 点击恢复页面级编辑，不表示正文内容编辑。 |
| B02｜发现新文件 | 在用户已授权且 App 可访问的范围内，增量索引确认发现新的可读 PDF、Word、Excel、PPT 或 TXT 文件；排除 Keen PDF 本次刚生成的文件；同一索引批次最多形成 1 个候选。 | B02-A｜新文件当前仍可读 | 主文案：发现新文档，点开即可查看 | Copy: A New File Is Ready to Open | Long CTA: View File（查看文件）<br>Short CTA: View（查看） | My Files，并定位到对应文件分类 | 首次全量索引不触发。 |
| B02｜发现新文件 | 同上 | B02-B｜新文件当前仍可读 | 主文案：发现新文件，可在 My Files 查看 | Copy: New File Found—View It in My Files | Long CTA: My Files（打开我的文件）<br>Short CTA: View（查看） | My Files | 通知和埋点不携带文件名、文件类型或 URI。 |
| B03｜移入回收站 | PDF 成功移入回收站后，以最后一次删除时间为准，用 `REPLACE` 安排 30 分钟检查。到点时，本次删除周期仍有至少 1 个可恢复 PDF，且本周期尚未成功投递，才形成候选；成功投递一次后本周期结束。发生新的删除操作时重新计时；本次删除周期的相关文件均已恢复或回收站已清空时取消候选。 | B03-A｜本次删除周期仍有可恢复 PDF | 主文案：PDF 删错了？现在还能恢复 | Copy: Deleted a PDF by Mistake? You Can Still Restore It | CTA: Review（查看） | Recycle Bin | 同一删除周期最多成功投递一次，连续删除时只保留最后一次删除后的检查任务。 |
| B03｜移入回收站 | 同上 | B03-B｜本次删除周期仍有可恢复 PDF | 主文案：需要找回刚删除的 PDF？回收站里还在 | Copy: Need That PDF Back? It's Still in the Recycle Bin | CTA: Review（查看） | Recycle Bin | 点击只进入回收站，不直接恢复文件；文件已无法恢复时不展示。 |
| B04｜广告外跳返回 | 用户从 Keen PDF 的有效任务点击广告并进入外部页面；达到后台配置时间后仍未返回；原任务仍可恢复。 | B04-A｜原任务有效 | 主文案：PDF 任务还没完成，返回继续处理 | Copy: Your PDF Task Is Waiting | CTA: Continue（继续） | 恢复外跳前任务 | 点击后直接恢复任务，不再次请求广告。 |
| B04｜广告外跳返回 | 同上 | B04-B｜原任务有效 | 主文案：一点返回刚才的 PDF 操作 | Copy: One Tap to Return to Your PDF Task | CTA: Return（返回） | 恢复外跳前任务 | 原任务失效时不展示。 |
| B05｜截图转 PDF | B05 场景开关开启，用户已授予 Keen PDF 读取新增截图所需的文件访问范围，且常驻前台服务正在运行。Keen PDF 处于后台时，通过系统媒体库监听到新增、已写入完成且仍可读取的图片；图片创建时间和系统媒体信息均符合已适配的截图识别规则，并排除历史图片、普通照片及 Keen PDF 自身生成的图片后，形成被动候选。 | B05-A｜存在至少 1 张仍可读取的本次截图 | 主文案：把刚才的截图转成 PDF | Copy: Turn Your Recent Screenshot into a PDF | Long CTA: Create PDF（创建 PDF）<br>Short CTA: Create（创建） | Image to PDF，自动带入本次候选中仍可读取的截图；全部失效时进入系统图片选择器 | 通知和 PendingIntent 不携带截图 URI，只传内部事件 ID，进入 App 后再从本地事件记录解析。 |
| B05｜截图转 PDF | 同上 | B05-B｜存在至少 1 张仍可读取的本次截图 | 主文案：截图保存成 PDF，查看和分享更方便 | Copy: Save Your Screenshots as a PDF | Long CTA: Create PDF（创建 PDF）<br>Short CTA: Create（创建） | 同上 | 同一媒体条目的重复回调只生成 1 个候选；10 秒内连续识别到的截图合并为 1 个候选，并按最后一次事件重新计时。权限撤销、常驻服务停止、图片不可读或无法明确识别为截图时不触发。 |

### 5.3 独立通知

| 通知类型 | 触发与内容 | 文案规则 | 频控与广告 | 路由 |
|---|---|---|---|---|
| 常驻通知 | 合法前台服务真实运行期间只展示 1 条，提供 Scan、OCR、Files、Widget、Create PDF 五个入口；Service 停止后移除。 | 使用 Android 标准通知模板适配浅色/深色；使用专用单色通知图标；渠道开启系统 Badge（角标），具体红点样式由 Launcher 和系统设置决定。 | 不进入普通通知频控；快捷入口点击不展示前置广告。 | Scan Camera、OCR 来源选择、My Files、Widgets 添加入口、Home 创建功能区。 |
| FCM 可见通知 | 后台下发标题/本地化键、正文/本地化键、受众、发送时段、过期时间和目标路由；Data-only `config_refresh` 只刷新配置，不展示通知。 | 服务端不得直接声称发现、完成、删除或恢复了本地文件；需要本地状态时只下发场景 ID，由客户端校验后使用本地模板。 | 独立执行 `fcm_enabled`、FCM 受众、时间段、最小间隔和每日上限；广告由消息配置决定，最多请求 1 次且失败不阻塞。 | 仅允许预置路由白名单；重复、过期、字段缺失或非法路由消息直接丢弃。 |

## 6. 后台字段

| 字段 | 适用场景或通知 | 默认值 | 口径 |
|---|---|---:|---|
| `inactive_milestones_days` | A01 | `3,7,15,30` | 长期未使用的四个一次性时间点。 |
| `unused_tool_recommend_interval_hours` | A02 | `24` | A02 两次成功投递之间的附加业务间隔，与通用场景间隔同时判断；达到该间隔且用户期间至少重新进入过 App 1 次后，才允许推荐下一个未使用的主要功能。 |
| `active_poll_interval_minutes` | 全部主动场景 | `2` | 达到首次通知延迟，且 App 在后台、普通通知启用、通知权限和下放范围可用后，每隔该分钟数启动一轮主动场景顺序检查。 |
| `default_interval_minutes` | 全部主动场景 | `15` | 所有主动场景 ID 统一使用该间隔，不为不同场景配置不同数值；每个场景 ID 分别记录最近一次成功投递时间并独立判断。 |
| `active_scene_cooldown_hours` | 全部主动场景 | `24` | 所有主动场景共用同一个冷却时长参数值，但每个主动场景 ID 在成功投递后分别记录时间并独立冷却；冷却期间不参与候选。 |
| `scene_daily_limit` | 主动通知、被动通知 | `99` | 全部主动和被动普通通知共用的当地自然日总上限，所有场景成功投递合并计数。 |
| `default_daily_limit` | 每个普通场景 | `5` | 所有场景 ID 统一使用该单场景日上限值，但每个场景 ID 分别计数；模板不单独计数。 |
| `app_update_check_interval_hours` | A04 | `24` | Google Play 更新状态最短查询间隔；主动候选检查不重复请求商店。 |
| `unfinished_task_delay_minutes` | B01 | `1` | 离开未完成任务多久后检查。 |
| `deleted_pdf_delay_minutes` | B03 | `30` | 移入回收站后的延时检查；新删除事件使用 `REPLACE` 重排。 |
| `ad_return_delay_minutes` | B04 | `2` | 广告外跳多久仍未返回才形成候选。 |
| `screenshot_event_merge_seconds` | B05 | `10` | 连续截图事件的合并窗口；窗口内新增且仍可读取的截图合并为一个候选，每次新增截图后按最后一次事件重新计时。 |
主动轮询时间、主动/被动通知间隔、普通通知统一日上限、单场景日上限、场景开关、模板轮换、展示时间、通知栏显示上限和主动场景冷却统一按本文第 1–4 章执行；开关、间隔、单场景日上限和主动场景冷却均属于场景 ID，模板不单独设置开关、间隔、日上限或冷却时间。
