首先是官方文档里的对接方式:(https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/ads/rewarded-video/tt-createRewardedVideoAd)

Page({
  onLoad() {
    // 创建实例
    this.ad = tt.createRewardedVideoAd({
      adUnitId: "xxx",
    });

    // 监听错误
    this.ad.onError((err) => {
      tt.hideLoading();
      switch (err.errCode) {
        case 1004:
          // 无合适的广告
          break;
        default:
        // 更多请参考错误码文档
      }
    });

    // 监听视频播放完成
    this.ad.onClose((data) => {
      tt.hideLoading();
      if (data.isEnded) {
        console.log("观看了", data.count, "个视频");
      } else {
        console.log("未观看完视频");
      }
    });

    // 预加载资源
    this.ad.load();
  },

  // 处理用户点击
  handleClick() {
    tt.showLoading();
    this.ad.show();
  },
});

在cocos creator开发的小游戏中,把onLoad换成start就差不多了,场景初始化的时候把视频对象初始化好,事件绑定好,如果是单场景的游戏确实没什么大问题,但多场景的小游戏这么写如果反复切换场景以后再看广告,获得的奖励次数就会跟观看次数不符,被审核打回。主要是offClose比较难用。
2023/07/12后续更新:前几天上架新的抖音小游戏时发现视频激励广告多了个RewardedVideoAd.destroy方法,该方法能销毁所有注册的事件,只要在用户离开场景的时候调用destroy就行了,也就是说进入场景createRewardedVideoAd,离开场景destroy,就能保证不会产生多播委托导致看一次广告获得多倍奖励

private videoAd
start() {
        let _this = this;
        //预加载广告
         this.videoAd = tt.createRewardedVideoAd({
            adUnitId: "XXXXXXXXXXX", //广告位id
            success(res) {
            },
            fail(res) {
                _this.showWarning('视频加载失败~')
            }
        });
        this.videoAd.onLoad(() => {
            console.log("广告加载完成");
        });
        this.videoAd.onError(() => {
            _this.showWarning('视频加载失败~')
        });
        this.videoAd.onClose(res => {
            // 用户点击了【关闭广告】按钮
            // 小于 2.1.0 的基础库版本,res 是一个 undefined
            if (res && res.isEnded || res === undefined) {
                // 正常播放结束,可以下发游戏奖励的逻辑
                })
            }
            else {
                // 播放中途退出,不下发游戏奖励
                _this.showWarning('观看中断!无法获取金币~')
            }
        })
    }

离开场景的按钮,调用一下销毁方法

onbtnLeave() {
    this.videoAd.destroy();
    director.loadScene('Main');//跳转到其他场景
}

观看广告的按钮事件,就用官方的即可

this.videoAd.show().catch(() => {
            // 失败重试
            this.videoAd.load()
                .then(() => this.videoAd.show())
                .catch(err => {
                    console.log('激励视频 广告显示失败')
                })
        })

其他小毛病审核一般都会告诉你明确的问题,以及怎么解决,比如样式问题之类的,没有什么难度,麻烦的是调试必须真机调试。另外插屏和banner广告有时候不显示,那是正常现象,这取决于登录用户,有些用户被系统判定没有观看广告价值或者和目前的广告定向不符的,就不会展示,按官方文档写就可以了。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐