广告位映射
每个 App 都要把你的统一广告位名(比如 revive 或 daily_chest)映射到广告网络的广告位 id。SDK 和事件里用的是你的名字;回调则按广告网络的 id 匹配。
- 名字由 1 到 100 个字母、数字或
. _ : -组成。 - 一个名字在每个广告网络下可以对应多个 id(最多 20 个),通常 iOS 一个、Android 一个。每个 id 可以带平台标签
ios或android。标签只用于展示和审计,匹配时会忽略。
npx @kasskeep/cli ads unit-set --id app_xxx --name revive --admob ios:ca-app-pub-123/456 --admob android:ca-app-pub-123/789npx @kasskeep/cli ads unit-set --id app_xxx --name revive --levelplay ios:kq2tbm5g3n7r9wxy,android:p8w3n5v2k7r9q4xznpx @kasskeep/cli ads units --id app_xxxnpx @kasskeep/cli ads unit-remove --id app_xxx --name revive传入的 id 会替换该名字下这个广告网络原有的 id;传空值则移除该广告网络。用管理 API:
PUT /v1/admin/tenants/:tenant_id/apps/:app_id/ad-units/revive{"networks": {"levelplay": [{"id": "<iOS id>", "platform": "ios"}, {"id": "<Android id>", "platform": "android"}], "admob": ["ca-app-pub-xxx/111"]}}每个广告网络的值可以是单个 id 字符串、由 id 或 {id, platform} 对象组成的数组,或者 null(表示移除)。请求体里没出现的广告网络保持不变。
一个 id 只对应一个名字
Section titled “一个 id 只对应一个名字”在同一个 App 和广告网络内,一个正式广告位 id 只能属于一个名字;第二个名字会收到 409 ad_unit_id_in_use。有两个例外:
- 广告网络官方的测试广告位(AdMob 的 demo 广告位和 LevelPlay 示例 App 的广告位),所有 App 共用。
- 开启了
ads_allow_shared_test_units的 App(npx @kasskeep/cli apps update --id app_dev --ads-allow-shared-test-units true)。只在开发用的 App 上使用。
当一个 id 对应多个名字时,Kasskeep 采用客户端回传的名字:LevelPlay 的 custom_ad_unit,或 AdMob 和 MAX 的 custom_data 里的 ad_unit=<name>(比如 ad_unit=revive&stage=3)。如果缺少这个名字,或者它不在候选之列,回调按未映射处理。
未映射的广告位
Section titled “未映射的广告位”每个 App 都有 ads_unmapped_policy:
reject(默认):广告位未映射的回调不产生事件、不发回调、不记录奖励。返回200 {"outcome": "unmapped_ignored"},让广告网络不再重试,并计入未匹配列表。emit:照常发出事件,ad_unit为null,由你的后端过滤。
npx @kasskeep/cli apps update --id app_xxx --ads-unmapped-policy rejectnpx @kasskeep/cli ads unmatched --id app_xxx --limit 50未匹配列表显示广告网络、广告位 id、次数、首次和最近出现时间。如果其中出现了真实广告位,请映射它;之后的回调会被记录,之前的不会重放。