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(打开应用) Short CTA: Open(打开) |
Home | 满 3 天只形成一次候选,第 4 天不重复。 |
| A01|长期未使用 | 同上 | A01-B|满 7 天 | 主文案:扫描、OCR、合并,打开即可使用 | Copy: Scan, OCR, and Merge in One Place | Long CTA: Open App(打开应用) Short CTA: Open(打开) |
Home | 用户连续 7 天未进入 App。 |
| A01|长期未使用 | 同上 | A01-C|满 15 天 | 主文案:把图片或纸质文档转成 PDF | Copy: Turn Photos or Paper into a PDF | Long CTA: Open Tools(打开工具) Short CTA: Open(打开) |
Home | 用户连续 15 天未进入 App。 |
| A01|长期未使用 | 同上 | A01-D|满 30 天 | 主文案:扫描、阅读、合并或拆分 PDF | Copy: Scan, Read, Merge, or Split PDFs | Long CTA: Open App(打开应用) 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(开始扫描) 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(提取文字) Short CTA: Convert(转换) |
OCR 来源选择 | 点击后不自动选择用户文件。 |
| A02|未使用核心工具 | 同上 | A02-C|Image to PDF 从未使用 | 主文案:多张图片不好分享?合成一份 PDF | Copy: Turn Multiple Photos into One PDF | Long CTA: Create PDF(创建 PDF) Short CTA: Create(创建) |
Image to PDF | 点击进入图片选择前的功能入口。 |
| A02|未使用核心工具 | 同上 | A02-D|Merge 从未使用 | 主文案:多份 PDF 太零散?合并成一个文件 | Copy: Merge Multiple PDFs into One File | Long CTA: Merge PDFs(合并 PDF) 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) Short CTA: Split(拆分) |
Split PDF | 点击进入选文件入口。 |
| A02|未使用核心工具 | 同上 | A02-F|Page Edit 从未使用 | 主文案:PDF 页面顺序不对?重新排序或旋转 | Copy: Reorder or Rotate PDF Pages | Long CTA: Edit Pages(编辑页面) 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(添加小组件) Short CTA: Add(添加) |
Widgets 二级页的添加入口 | 添加任意 Keen PDF Widget 后场景永久结束。 |
| A03|Widget 未添加 | 同上 | A03-B|场景成立即可参与 | 主文案:少一步操作,直接从桌面打开 PDF 工具 | Copy: Open Your PDF Tools in One Tap | Long CTA: Add Widget(添加小组件) 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(立即更新) Short CTA: Update(更新) |
Google Play App 页;不可用时进入网页商店,再失败回 Home | 查询失败、缓存过期或没有更高版本时不展示。 |
| A04|版本更新 | 同上 | A04-B|真实存在更高版本 | 主文案:获取最新版 Keen PDF | Copy: Get the Latest Keen PDF Version | Long CTA: Update Now(前往更新) 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) Short CTA: Resume(继续) |
原 OCR 任务;失效时进入 OCR 来源选择 | OCR 结果已失效时不展示成功话术。 |
| B01|未完成任务 | 同上 | B01-C|Image to PDF 至少已选 1 张图片 | 主文案:已选图片还在,继续生成 PDF | Copy: Your Selected Images Are Waiting | Long CTA: Finish PDF(继续创建) 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(继续合并) 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(继续编辑) 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(查看文件) Short CTA: View(查看) |
My Files,并定位到对应文件分类 | 首次全量索引不触发。 |
| B02|发现新文件 | 同上 | B02-B|新文件当前仍可读 | 主文案:发现新文件,可在 My Files 查看 | Copy: New File Found—View It in My Files | Long CTA: My Files(打开我的文件) 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) 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) 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,模板不单独设置开关、间隔、日上限或冷却时间。 |