uniapp 传统模式下激励广告回调如何实现
在uniapp的传统模式下,激励广告的onClose回调似乎无法正常触发。我已经按照文档配置了广告位和监听事件,但广告关闭后回调函数没有执行。请问具体应该如何正确实现激励广告的回调?是否需要特殊处理或额外配置?能否提供一个完整的示例代码?
2 回复
在uniapp传统模式下,激励广告回调可通过plus.ad.createRewardedVideoAd创建广告实例,然后监听onLoad、onClose等事件。在onClose中判断isEnded参数,若为true则发放奖励。
在 UniApp 的传统模式(非 Vue3 组合式 API)下,激励广告的回调可通过 uni.createRewardedVideoAd 创建广告实例,并监听其事件来实现。以下是关键步骤和示例代码:
实现步骤:
- 创建激励广告实例:使用广告单元 ID 初始化。
- 监听广告事件:包括加载成功、加载失败、播放完成、播放错误等。
- 处理用户奖励:在
onClose事件中根据isEnded参数判断是否完整播放。
示例代码:
export default {
data() {
return {
rewardedVideoAd: null
};
},
onLoad() {
// 创建激励广告实例(替换为你的广告单元 ID)
this.rewardedVideoAd = uni.createRewardedVideoAd({
adUnitId: '你的广告单元ID'
});
// 监听广告加载成功事件
this.rewardedVideoAd.onLoad(() => {
console.log('激励广告加载成功');
});
// 监听广告加载失败事件
this.rewardedVideoAd.onError((err) => {
console.error('激励广告加载失败', err);
});
// 监听广告关闭事件(关键回调)
this.rewardedVideoAd.onClose((res) => {
if (res && res.isEnded) {
// 用户完整观看了广告,发放奖励
console.log('激励广告完整播放,发放奖励');
this.giveReward();
} else {
// 用户中途关闭了广告
console.log('激励广告未播放完成,不发放奖励');
}
});
},
methods: {
// 展示激励广告
showRewardedAd() {
this.rewardedVideoAd.show().catch(err => {
// 如果广告未加载好,这里可以重新加载
console.error('广告展示失败', err);
this.rewardedVideoAd.load().then(() => {
this.rewardedVideoAd.show();
});
});
},
// 发放奖励的方法
giveReward() {
// 这里实现你的奖励逻辑,例如增加金币、解锁功能等
uni.showToast({ title: '奖励已发放!', icon: 'success' });
}
},
onUnload() {
// 页面卸载时销毁广告实例
this.rewardedVideoAd.destroy();
}
};
注意事项:
- 广告单元 ID:需在广告平台(如腾讯广点通、穿山甲)申请,并确保与应用匹配。
- 测试阶段:使用测试 ID 避免频繁请求广告。
- 错误处理:加载或播放失败时需适当处理(如重新加载)。
- 平台差异:各平台(微信、头条等)的广告行为可能略有不同,需测试验证。
通过以上代码,即可在 UniApp 中实现激励广告的完整回调逻辑。

