跳到主要内容

Ad API

Ad API

激励视频、横幅、分享等激励动作自 v0.2.0 起已统一为单一槽位模型。 通过查询 API(getRewardedAdSlots / getRewardedAdSlot)获取活跃槽位并渲染, 用户点击时只需一次 showRewardedAd({ slotId }) 调用即可执行。如需在不使用槽位的情况下仅展示激励视频 广告,仍可照常使用 showRewardedAd({ adUnitId })

showRewardedAd(options) (推荐)

一次调用即可执行激励广告/激励动作。若提供 slotId,则按该槽位的动作(视频/横幅/分享)执行; 否则使用 adUnitId 执行激励视频广告。 加载、展示、失败重试及提示由平台自动处理。

选项:

参数类型必填说明
slotIdstring激励槽位 ID(从 getRewardedAdSlots / getRewardedAdSlot 获取)。优先处理。
adUnitIdstring广告单元 ID。未指定 slotId 时按激励视频广告执行。
successfunction-成功回调
failfunction-失败回调
completefunction-完成回调

slotIdadUnitId 均为可选,但至少需提供一个。两者都存在时,slotId 优先。

成功响应:

字段类型说明
isEndedboolean激励是否完成(奖励发放对象)
errMsgstring结果消息
// 1) 执行激励槽位(推荐)
TudadaSDK.showRewardedAd({
slotId: slot.slotId,
success: (res) => {
if (res.isEnded) {
giveReward(); // 奖励发放由游戏自行执行
}
},
fail: (err) => console.error('激励动作执行失败:', err.errMsg),
});

// 2) 直接执行激励视频广告
TudadaSDK.showRewardedAd({
adUnitId: 'your-ad-unit-id',
success: (res) => {
if (res.isEnded) giveReward();
},
});

参考: 加载失败时平台会自动重试,最终失败时会显示提示弹窗。游戏无需单独实现错误处理 UI。isEndedtrue 时即为奖励发放对象,实际奖励发放由游戏自行执行

showRewardedAdAsync(options)

showRewardedAd() 的 Promise 版本。选项相同,通过 Promise<ShowRewardedAdResult> 返回激励完成状态。

const result = await TudadaSDK.showRewardedAdAsync({ slotId: slot.slotId });
if (result.isEnded) {
giveReward();
}

统一激励槽位

激励槽位是将激励视频、横幅、分享作为单一模型处理的 v0.2.0 统一 API。游戏 获取活跃槽位列表,使用 slotData 自行渲染,用户点击时以 showRewardedAd({ slotId }) 执行。

每个槽位的结构如下。

字段类型说明
slotIdstring槽位标识符(执行时指定)
actionstring动作类型('REWARD_VIDEO' | 'BANNER' | 'SHARE'
slotDataobject?供游戏渲染的数据(可选)
slotData.imageUrlstring?槽位图片 URL(游戏自行渲染)
slotData.titlestring?槽位标题
slotData.expiresAtnumber?过期时间(Unix 毫秒)

默认激励视频与分享槽位没有需要渲染的视觉元素,因此可能没有 slotData。横幅槽位通常包含 slotData.imageUrl

getRewardedAdSlots(options?)

获取全部活跃激励槽位列表。

选项:

参数类型必填说明
successfunction-成功回调
failfunction-失败回调
completefunction-完成回调

成功响应:

字段类型说明
slotsRewardedAdSlot[]活跃槽位列表
errMsgstring结果消息
TudadaSDK.getRewardedAdSlots({
success: ({ slots }) => {
slots.forEach((slot) => {
if (slot.slotData?.imageUrl) renderSlot(slot);
});
},
});

getRewardedAdSlotsAsync()

getRewardedAdSlots() 的 Promise 版本。

const { slots } = await TudadaSDK.getRewardedAdSlotsAsync();

getRewardedAdSlot(options)

slotId 查询单个槽位。如果槽位不存在,将调用 fail 回调。

选项:

参数类型必填说明
slotIdstring要查询的槽位 ID
successfunction-成功回调
failfunction-失败回调(包括槽位不存在)
completefunction-完成回调

成功响应:

字段类型说明
slotRewardedAdSlot槽位信息
errMsgstring结果消息
TudadaSDK.getRewardedAdSlot({
slotId: 'main_menu_reward',
success: ({ slot }) => renderSlot(slot),
fail: (err) => console.warn('槽位不存在:', err.errMsg),
});

getRewardedAdSlotAsync(slotId)

getRewardedAdSlot() 的 Promise 版本。直接以槽位 ID 作为参数传入,槽位不存在时 reject。

try {
const { slot } = await TudadaSDK.getRewardedAdSlotAsync('main_menu_reward');
renderSlot(slot);
} catch (e) {
// 槽位没有可展示的激励 — 不显示 UI
}

完整流程:

// 1) 查询活跃槽位
const { slots } = await TudadaSDK.getRewardedAdSlotsAsync();

// 2) 渲染槽位(由游戏自行完成)
slots.forEach((slot) => {
if (!slot.slotData?.imageUrl) return;
const el = renderSlotButton(slot.slotData);

// 3) 用户点击时执行
el.onclick = async () => {
const res = await TudadaSDK.showRewardedAdAsync({ slotId: slot.slotId });
if (res.isEnded) giveReward(); // 奖励发放由游戏自行执行
};
});

createRewardedVideoAd(options) (旧版)

已弃用 (Deprecated)

createRewardedVideoAd 是旧版 API,将在未来版本中移除。请使用统一 API showRewardedAd()showRewardedAdAsync()

创建激励视频广告实例。

选项:

参数类型必填说明
adUnitIdstring广告单元 ID
multitonboolean-多实例模式

参考: 当前仅支持单个广告,且广告 ID 由平台控制,因此 adUnitId 可输入任意字符串。

实例方法:

成员类型说明
load()Promise<void>加载广告
show()Promise<void>展示广告
destroy()void销毁实例
onLoad(callback)void加载完成事件
onError(callback)void错误事件
onClose(callback)void关闭事件
offLoad(callback?)void取消加载事件
offError(callback?)void取消错误事件
offClose(callback?)void取消关闭事件
// 创建广告实例
const rewardedAd = TudadaSDK.createRewardedVideoAd({
adUnitId: 'your-ad-unit-id',
});

// 注册事件监听器
rewardedAd.onLoad(() => {
console.log('广告加载完成');
});

rewardedAd.onError((err) => {
console.error('广告错误:', err.errMsg, err.errCode);
});

rewardedAd.onClose((res) => {
if (res.isEnded) {
// 用户已完整观看广告 → 发放奖励
console.log('发放奖励!');
giveReward();
} else {
// 用户中途关闭
console.log('广告中途关闭');
}
});

// 加载并展示广告
rewardedAd.load()
.then(() => rewardedAd.show())
.catch((err) => console.error('广告展示失败:', err));

已弃用 (Deprecated)

横幅广告 API(getAvailableBannerIds / getBanner / runBannerAction)已统一激励槽位取代,仅为兼容而保留。新接入请使用 getRewardedAdSlots() 获取槽位,并以 showRewardedAd({ slotId })(action=BANNER)执行。

横幅广告采用槽位模型:游戏在屏幕上定义槽位(如 "main_menu_top"),由游戏自行渲染广告图片。SDK 仅负责图片 URL 的传递与动作处理,渲染、点击检测与后处理由游戏自由控制。

  • bannerId 是兼作槽位名称的横幅标识符。
  • 用户点击横幅时,游戏调用 runBannerAction(bannerId) 将动作处理委托给 SDK。
  • 响应只携带 success / fail 信号,奖励等后处理在游戏内部完成。

getAvailableBannerIds(options)

获取当前活跃的横幅槽位 ID 列表。由于游戏通常已知自己的槽位名称,此 API 主要用于运营元数据。

选项:

参数类型必填说明
successfunction-成功回调
failfunction-失败回调
completefunction-完成回调

成功响应:

字段类型说明
bannerIdsstring[]活跃槽位名称数组
errMsgstring结果消息
TudadaSDK.getAvailableBannerIds({
success: ({ bannerIds }) => {
console.log('活跃槽位:', bannerIds);
},
});

getAvailableBannerIdsAsync()

getAvailableBannerIds() 的 Promise 版本。

const { bannerIds } = await TudadaSDK.getAvailableBannerIdsAsync();

getBanner(options)

按槽位名称获取匹配的横幅数据。如果槽位未匹配到广告,将调用 fail 回调。

选项:

参数类型必填说明
bannerIdstring兼作槽位名称的横幅 ID
successfunction-成功回调
failfunction-失败回调(包括"无匹配")
completefunction-完成回调

成功响应:

字段类型说明
banner.bannerIdstring兼作槽位名称的横幅 ID
banner.imageUrlstring横幅图片 URL(游戏自行渲染)
banner.expiresAtnumber?过期时间(Unix 毫秒,可选)
errMsgstring结果消息
TudadaSDK.getBanner({
bannerId: 'main_menu_top',
success: ({ banner }) => {
const img = document.createElement('img');
img.src = banner.imageUrl;
document.body.appendChild(img);
},
fail: (err) => {
console.warn('该槽位无可用广告:', err.errMsg);
},
});

getBannerAsync(bannerId)

getBanner() 的 Promise 版本。无匹配广告时 reject。

try {
const { banner } = await TudadaSDK.getBannerAsync('main_menu_top');
renderBanner(banner.imageUrl);
} catch (e) {
// 槽位无匹配广告 — 跳过渲染
}

runBannerAction(options)

用户点击横幅时由游戏调用。SDK 处理动作(深链接/外部链接等)并仅通知 success / fail 信号。

奖励等后处理在游戏内部完成。

选项:

参数类型必填说明
bannerIdstring兼作槽位名称的横幅 ID
successfunction-成功回调 — 游戏发放奖励等后处理
failfunction-失败回调
completefunction-完成回调
img.onclick = () => {
TudadaSDK.runBannerAction({
bannerId: 'main_menu_top',
success: () => {
grantReward(); // 游戏侧奖励发放
},
fail: (err) => {
showToast(err.errMsg);
},
});
};

runBannerActionAsync(bannerId)

runBannerAction() 的 Promise 版本。

img.onclick = async () => {
try {
await TudadaSDK.runBannerActionAsync('main_menu_top');
grantReward();
} catch (e) {
showToast('处理失败');
}
};