主题
测试应用与测试广告位
对接期间请使用独立的测试应用(Test App)与测试广告位,与正式应用完全隔离。测试广告位保证有广告填充,用于验证接入是否正确。
测试与正式的差别只有 apiKey 和广告位
测试应用与正式应用使用相同的 Bundle ID,appId 与 endpoint 同样无需切换 —— 上线时只要把 apiKey 和各广告位的 adUnitId 换成正式应用的值即可,代码本身不用改。所以本页申请到的凭证配合各端已有的接入示例就能完成全部测试,无需另写测试代码。
整体流程
创建测试应用(勾选 Test app)
↓
获取该应用的 API Key
↓
为该应用创建测试广告位(按需要测试的广告类型各建一个)
↓
复制 adUnitId,填入代码按广告类型逐个验证
↓
上线前替换为正式应用的 apiKey / adUnitId第一步:创建测试应用
进入 Publisher Platform → Apps,点击右上角 + New App,在弹窗中填写应用信息:
| 字段 | 说明 |
|---|---|
| OS | 应用平台,Android / iOS |
| Published Status | 上架状态,测试应用选 Unpublished 即可 |
| Bundle ID | 应用包名,如 com.android.apptest。请填写与正式应用相同的包名 —— 测试应用与正式应用共用同一个 Bundle ID |
| App Name | 应用名称,建议带上 test 前缀便于与正式应用区分 |
| Icon URL | 应用图标地址,可选 |
| Test app | 必须勾选,勾选后该应用下的广告位才是测试广告位 |
填写完成后点击 Create App。
务必勾选 Test app
未勾选时创建出的是正式应用,其广告位不保证填充,且会产生真实的计费与风控数据。创建后可在应用列表的 TEST APP 列确认开关为开启状态。

第二步:获取 API Key
应用创建成功后,页面顶部提示 App created. An API key was generated automatically. —— API Key 已自动生成,无需单独申请。
在应用列表中找到刚创建的应用,点击 API KEY 列的钥匙图标,在弹窗中点击 Copy 复制。

该值对应初始化参数中的 apiKey,测试与正式各有一份:
kotlin
NovvySDK.initialize(
appId = "...", // 测试与正式一致,无需切换
apiKey = "第二步复制到的 API Key", // 测试与正式不同
endpoint = "https://bid.novvy.ai", // 测试与正式一致,无需切换
...
)API Key 属于密钥
请勿提交到公开代码仓库、不要写在客户端明文配置以外的地方共享。如需轮换请联系 Novvy 技术对接人。
第三步:创建测试广告位
进入 Publisher Platform → Ad Units,点击右上角 + Create ad unit:
| 字段 | 说明 |
|---|---|
| Select app | 选择第一步创建的测试应用,下拉项末尾带 TEST 标记(如 apptest · Android · TEST) |
| Ad unit name | 广告位名称,自行命名,建议与广告类型对应,如 test-rewarded |
| Format | 广告类型,见下方对照表 |
点击 Create 完成创建。需要测试哪些广告类型,就各创建一个对应 Format 的广告位。

第四步:复制 adUnitId
在广告位列表中找到刚创建的广告位,点击 AD UNIT ID 列右侧的复制图标即可复制。

adUnitId 是含斜杠的完整字符串
形如 app_ur74czju4q4l/9858822100,请用复制按钮取得完整值,不要只取斜杠后的数字部分。
广告类型对照与 ID 登记
后台 Format 与 SDK 类的对应关系如下。建议创建完成后把 ID 填入本表,作为后续填写代码的底稿:
| 后台 Format | SDK 类 | 你的测试 adUnitId |
|---|---|---|
| Rewarded | NovvyRewardedAd | |
| Interstitial | NovvyInterstitialAd | |
| Scroll Placement | NovvyScrollAd | |
| Mid Placement | NovvyMidAd | |
| End Placement | NovvyEndAd | |
| Pause Placement | NovvyPauseAd | |
| Story Placement | NovvyInsertAd |
第五步:按广告类型接入并验证
拿到测试凭证后,直接使用各端接入文档中的示例代码,把 adUnitId 替换为上表中对应的测试广告位 ID 即可开始测试 —— 测试代码与正式代码完全一致,无需另写。
| 广告类型 | Android | iOS | Flutter | React Native |
|---|---|---|---|---|
| 激励视频 | 接入 | 接入 | 接入 | 接入 |
| 插屏 | 接入 | 接入 | 接入 | 接入 |
| 信息流滑动位 | 接入 | 接入 | 接入 | 接入 |
| 中插 | 接入 | 接入 | 接入 | 接入 |
| 片尾 | 接入 | 接入 | 接入 | 接入 |
| 暂停卡 | 接入 | 接入 | 接入 | 接入 |
| 叙事植入 | 接入 | 接入 | 接入 | 接入 |
初始化与上下文设置见各端的「初始化 SDK」与「用户与内容上下文」。
测试环境说明
测试广告位保证填充
测试应用下的广告位必定有广告返回。因此测试环境中出现 NovvyError.NoFill,一定是接入问题(凭证填错、未初始化就发起请求、正式应用与测试广告位混用等),而不是「正常无填充」。
- 内容上下文可随意填写 —— 正式环境中短剧场景需要正确的
seriesName/episodeNumber才有填充;测试环境不做此校验,随意填写也能拿到广告。设置方式仍见用户与内容上下文。 endpoint与正式环境一致,无需切换地址。
切换到正式环境
测试完成后,只需把 apiKey 与各广告位的 adUnitId 替换为正式应用的对应值,代码无需改动,也无需重新申请权限:
| 配置项 | 切换到正式环境时 |
|---|---|
Bundle ID / appId | 不变 —— 测试应用与正式应用共用同一个 Bundle ID |
endpoint | 不变 |
apiKey | 替换为正式应用的 API Key |
adUnitId | 替换为正式应用下对应广告位的 ID |
建议把 apiKey 与各广告位 ID 集中在一处配置、按构建类型切换,避免上线时遗漏:
kotlin
object NovvyConfig {
private val isTest = BuildConfig.DEBUG
val apiKey = if (isTest) "test_api_key" else "prod_api_key"
val rewarded = if (isTest) "test_rewarded_id" else "prod_rewarded_id"
val interstitial = if (isTest) "test_interstitial_id" else "prod_interstitial_id"
// ...其余广告位同理
}swift
enum NovvyConfig {
#if DEBUG
static let apiKey = "test_api_key"
static let rewarded = "test_rewarded_id"
static let interstitial = "test_interstitial_id"
#else
static let apiKey = "prod_api_key"
static let rewarded = "prod_rewarded_id"
static let interstitial = "prod_interstitial_id"
#endif
// ...其余广告位同理
}dart
class NovvyConfig {
static const _isTest = kDebugMode;
static const apiKey = _isTest ? 'test_api_key' : 'prod_api_key';
static const rewarded = _isTest ? 'test_rewarded_id' : 'prod_rewarded_id';
static const interstitial = _isTest ? 'test_interstitial_id' : 'prod_interstitial_id';
// ...其余广告位同理
}ts
export const NovvyConfig = {
apiKey: __DEV__ ? 'test_api_key' : 'prod_api_key',
rewarded: __DEV__ ? 'test_rewarded_id' : 'prod_rewarded_id',
interstitial: __DEV__ ? 'test_interstitial_id' : 'prod_interstitial_id',
};上线前请确认:apiKey 已替换为正式应用的 API Key,且代码中不再引用任何测试广告位 ID。