5.3 KiB
Commercialization.tapadn 全局设计
目标
本模块把 TapADN / Dirichlet 聚合广告 SDK 接到 CC-Framework.Commercialization 抽象层后面,让业务项目继续只关心 ADManager 和 ADConfig。
当前实现对齐 Commercialization.topon 的分层:
CC-Framework.Commercialization:ADManager、IAdController、ADPlayer抽象。Commercialization.tapadn: 平台 controller、广告播放器、构建自动化。DirichletMediation: 官方 SDK 和平台桥。
目录
Assets/DirichletMediation: 官方聚合 Unity SDK4.2.5.0,已删除官方 Sample。Assets/Plugins/Android: 官方 Android AAR、Manifest、ProGuard、本地微信 OpenSDK AAR。Assets/Plugins/iOS: 官方 iOS bridge。Assets/Tapadn_Adapter/Runtime/Scripts: 商业化抽象层适配。Assets/Tapadn_Adapter/Editor: Android 构建后处理和依赖声明。Assets/Samples~: 可选调试样例预留,不随主包自动进入业务项目。
Runtime 设计
TapadnAdController 实现 IAdController:
- 从
ADConfig和可选args解析TapadnControllerOptions。 - 构造
DirichletAdConfig并调用DirichletSdk.Init。 - 根据
AD_Type创建TapadnAwardVideoPlayer、TapadnInteractionPlayer、TapadnSplashPlayer。
TapadnCommercialization 是便捷入口:
CreateController()隐藏 controller 创建细节。InitADManager(...)由模块负责创建 controller 并交给ADManager。CreateConfig(...)用代码生成临时ADConfig,适合游戏项目不想维护 TapADN SDK 细节时使用。
广告播放器
默认方案:使用 TapADN auto-ad 接口。
原因:
- 官方 Unity 文档推荐 Android auto-ad,接口把加载和展示合并,SDK 自己管理缓存。
ADManager.AsyncAdPlayer已有遮罩、超时和回调收口;auto-ad 可以让业务侧首次播放少一个 preload 时序。
备选方案:手动 load/show。
- 已通过
tapadn.rewarded_auto_load=false等 key 保留。 - 手动模式保存 SDK 返回的 ad handle,并在
Closed时销毁。
不确定点:
- 官方文档说明 auto-ad 目前主要是 Android 能力,iOS auto-ad 会返回
not_supported。本模块保留手动 fallback,但真正 iOS 出包前需要用 TapADN iOS 账号和广告位做真机验证。 AD_Type抽象层没有 Banner 类型,所以本轮没有将 TapADN Banner 暴露到ADManager。如果抽象层后续新增 Banner,可以直接复用官方ShowBannerAutoAd。
配置设计
基础字段复用 ADConfig:
Id: MediaId。Key: MediaKey。Key2: MediaName。BaseAwardAdKeyValue.value: 激励视频 SpaceId。BaseInteractionAdKeyValue.value: 插屏 SpaceId。BaseSplashAdKeyValue.value: 开屏 SpaceId。
高级配置通过 CommonKeyValues 或字典传入,使用 tapadn.* 前缀,避免和 TopOn 现有 key 冲突。
Android 构建设计
保留官方 DirichletGradlePostProcessor,它负责 Dirichlet AAR 和 Maven 依赖注入。
新增 TapadnBuildAndroidProcess,只负责本模块集成层额外需求:
- TapADN Manifest 权限补齐。
com.tapsdk.tapad.internal.TapADFileProvider和@xml/tapad_ad_file_path。- 微信 OpenSDK 的
com.tencent.mmqueries 与.wxapi.WXEntryActivity。 - AndroidX / Jetifier 开关。
方案选择记录:
- 方案 A:只放
WXDependencies.xml,依赖宿主 EDM4U 下载微信 SDK。风险是业务项目没有 EDM4U 或未 resolve 时构建失败。 - 方案 B:只放本地微信 AAR。风险是宿主 EDM4U 依赖图不可见。
- 当前选择:本地 AAR +
WXDependencies.xml同时保留。这样最接近 TopOn 当前工程,也能覆盖无 EDM4U 的构建场景。
编辑器可见性
本模块不提供默认可见面板。构建自动化通过 IPostGenerateGradleAndroidProject 静默执行;调试能力放入 Samples~,由业务项目显式导入。
若后续需要可视化配置面板,应使用宏包裹菜单入口,例如 COMMERCIALIZATION_TAPADN_DEBUG_MENU,默认不在业务项目菜单里出现。
UPM 与本机验证约定
发布包入口是 Assets/package.json,其中 com.foldcc.cc-framework.commercialization 依赖保持为远程 Git URL:
"com.foldcc.cc-framework.commercialization": "http://private.lightyears.ltd:18650/foldcc/CC-Framework.Commercialization.git#1.0.14"
当前仓库自身作为 Unity 验证工程时,可以在 Packages/manifest.json 使用本地 file: 引用:
"com.foldcc.cc-framework.commercialization": "file:CC-Framework.Commercialization/Assets"
该路径以 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 编译错误。