uniapp 传统模式下激励广告回调如何实现

在uniapp的传统模式下,激励广告的onClose回调似乎无法正常触发。我已经按照文档配置了广告位和监听事件,但广告关闭后回调函数没有执行。请问具体应该如何正确实现激励广告的回调?是否需要特殊处理或额外配置?能否提供一个完整的示例代码?

2 回复

在uniapp传统模式下,激励广告回调可通过plus.ad.createRewardedVideoAd创建广告实例,然后监听onLoadonClose等事件。在onClose中判断isEnded参数,若为true则发放奖励。


在 UniApp 的传统模式(非 Vue3 组合式 API)下,激励广告的回调可通过 uni.createRewardedVideoAd 创建广告实例,并监听其事件来实现。以下是关键步骤和示例代码:

实现步骤:

  1. 创建激励广告实例:使用广告单元 ID 初始化。
  2. 监听广告事件:包括加载成功、加载失败、播放完成、播放错误等。
  3. 处理用户奖励:在 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 中实现激励广告的完整回调逻辑。

回到顶部