Add TapADN smart preload attribution

This commit is contained in:
2026-06-05 21:44:35 +08:00
parent c21bdec3fe
commit fd98a7f541
48 changed files with 9441 additions and 18 deletions

View File

@@ -35,12 +35,12 @@
## 广告播放器
默认方案:使用 TapADN auto-ad 接口
默认方案:优先手动 load/show避免把 `ADManager.AsyncAdPlayer` 的时序语义与 TapADN auto 语义混用
原因:
* 官方 Unity 文档推荐 Android auto-ad接口把加载和展示合并SDK 自己管理缓存
* `ADManager.AsyncAdPlayer` 已有遮罩、超时和回调收口auto-ad 可以让业务侧首次播放少一个 preload 时序
* TapADN auto-ad 是官方 Android 场景下的“加载 + 展示合并”调用,不等价于完整场景分发与实时 readiness 能力
* `ADManager.AsyncAdPlayer` 先做 `IsReadly` 决策,未 ready 则调用 `LoadAD`ready 后再 `ShowAD`,所以手动模式下生命周期和失败收口更稳定
备选方案:手动 load/show。
@@ -105,3 +105,37 @@
该路径以 `Packages/manifest.json` 所在目录为基准,符合 Unity 本地 UPM package 规则;`Packages/CC-Framework.Commercialization` 只是本机验证副本,已被 `.gitignore` 排除,不进入发布包。
如果 batchmode 出现 `Failed to resolve packages: The "path" argument must be of type string. Received undefined`,不把它直接归因为 manifest 路径错误,也不使用 `-noUpm` 绕过。处理顺序是保存 Unity Editor log 和 `%LOCALAPPDATA%\Unity\Editor\upm.log`,确认没有并发 Unity/UPM 进程,再用官方 `Unity.exe -batchmode -quit -projectPath <project> -logFile <log>` 做一次只解析 package 的验证;若仍复现,则用 Unity Hub/已打开 Editor 作为 GUI 对照入口继续看 Console 编译错误。
## 策略验收与可视化
模块内置智能预加载策略评估脚本已接入,默认次留验收目标为 `35%`,用于验证 `PreloadThreshold``CooldownSeconds` 在不同留存下的策略敏感度。
验收输出位于:
* `Tools/SmartLoadSensitivity/output/TapADN_智能预加载_敏感度验收报告.md`
* `Tools/SmartLoadSensitivity/output/smartload_sensitivity_summary.csv`
* `Tools/SmartLoadSensitivity/output/smartload_retention_rank.csv`
* `Tools/SmartLoadSensitivity/output/*.png`
推荐复现命令:
```bash
python Tools/SmartLoadSensitivity/smartload_sensitivity_simulation.py --users 5000 --out-dir Tools/SmartLoadSensitivity/output
```
核心对比维度(含 35%次留):
* `threshold` 的下调会提升 `Immediate`,但会抬高 `Waste`
* `cooldown` 拉长可压低 waste、降低重复预加载频次但也会把 show 等待时延上抬。
* 默认策略建议先用 `threshold=0.20~0.40` 做高即时性验证,再通过 waste 上限(如 8%~12%)回退到 `0.35~0.55` 区间。
### 全局缓存归因
`CC-Framework.Commercialization` 当前是一类广告一个全局 `ADPlayer`,场景只是播放与策略标签,不是缓存隔离单位。因此 TapADN 智能预加载按两层口径统计:
* 策略触发层:哪个场景触发了真实 SDK load记录 `preload_request/preload_success/preload_fail`
* 播放消费层:哪个场景实际发起 `AsyncPlayAD` 并展示,记录 `immediate_hit/show_start/smart_cache_hit`
如果 A 场景触发的全局缓存最终在 B 场景展示A 会记录 `smart_preload_consumed_other_scene`B 会记录 `smart_cache_cross_scene_hit`。这不会改变玩家实际体验,只用于避免把“全局缓存命中”误读成“同场景完全自消费”。
验收产物建议每周回放:用最近 7 天留存分布与 fill 成功率替换脚本默认参数,再做一次敏感度重算并对比排名变化。