收藏
回答

使用激励广告单页面时重复创建广告实例会失败报错?

**创建并初始化微信激励视频广告*/

const createWxRewardedVideoAd = async () => {
    // 先销毁之前的广告实例
    safeDestroyAd();
    if (!wx.createRewardedVideoAd) {
        console.error('当前环境不支持微信激励视频广告');
        uni.showToast({
            title: '当前环境不支持广告',
            icon: 'none',
        });
        return false;
    }

    // 获取当前要使用的广告位
    const currentAd = apdidList.value[setTimeNum.value];
    if (!currentAd) {
        console.error('没有可用的广告位');
        uni.showToast({
            title: '暂无可用广告',
            icon: 'none',
        });
        return false;
    }
    console.log('创建广告实例,广告位:', currentAd.adpid);
    try {
        // 创建广告实例
        adRewardedVideoRef.value = wx.createRewardedVideoAd({
            adUnitId: currentAd.adpid,
        });
        loadAdData.value = currentAd;
        urlCallback.extra = currentAd.extra;
        console.log('广告实例创建------111', adRewardedVideoRef.value);
        // 设置广告事件监听
        setupAdEventListeners();
        console.log('广告实例创建成功');
        return true;
    } catch (error) {
        console.error('广告实例创建失败', error);
        // 尝试下一个广告位
        await tryNextAdUnit();
        return false;
    }
/**设置广告事件监听*/
const setupAdEventListeners = () => {
    if (!adRewardedVideoRef.value) return;
    // 移除之前的事件监听(避免重复监听)
    adRewardedVideoRef.value.offLoad && adRewardedVideoRef.value.offLoad();
    adRewardedVideoRef.value.offError && adRewardedVideoRef.value.offError();
    adRewardedVideoRef.value.offClose && adRewardedVideoRef.value.offClose();
    // 广告加载成功
    adRewardedVideoRef.value.onLoad(() => {
        console.log('激励视频广告加载成功');
        uni.hideLoading();
    });
    // 广告加载失败
    adRewardedVideoRef.value.onError((err) => {
        console.error('激励视频广告加载失败', err);
        uni.hideLoading();
        // 加载失败时尝试下一个广告位
        tryNextAdUnit();
    });
    // 广告关闭事件 - 这是关键回调
    adRewardedVideoRef.value.onClose(async (res) => {
        console.log('激励视频广告关闭', res);
        await onAdClose(res);
        // 广告关闭后立即销毁实例
        console.log('广告关闭,销毁广告实例');
        safeDestroyAd();
    });

};
};**创建并初始化微信激励视频广告*/
const createWxRewardedVideoAd = async () => {
    // 先销毁之前的广告实例
    safeDestroyAd();
    if (!wx.createRewardedVideoAd) {
        console.error('当前环境不支持微信激励视频广告');
        uni.showToast({
            title: '当前环境不支持广告',
            icon: 'none',
        });
        return false;
    // 获取当前要使用的广告位
    const currentAd = apdidList.value[setTimeNum.value];
    if (!currentAd) {
        console.error('没有可用的广告位');
        uni.showToast({
            title: '暂无可用广告',
            icon: 'none',
        });
        return false;
    }
    console.log('创建广告实例,广告位:', currentAd.adpid);
    try {
        // 创建广告实例
        adRewardedVideoRef.value = wx.createRewardedVideoAd({
            adUnitId: currentAd.adpid,
        });
        loadAdData.value = currentAd;
        urlCallback.extra = currentAd.extra;
        console.log('广告实例创建------111', adRewardedVideoRef.value);
        // 设置广告事件监听
        setupAdEventListeners();
        console.log('广告实例创建成功');
        return true;
    } catch (error) {
        console.error('广告实例创建失败', error);
        // 尝试下一个广告位
        await tryNextAdUnit();
        return false;
    }
};
回答关注问题邀请回答
收藏

2 个回答

  • 『 小智 』
    『 小智 』
    2025-11-10

    如何确保加载完毕,再次初始化创建就失败,广告位也只有一个,无法进行轮询加载广告

    2025-11-10
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    2025-11-08
    有用
登录 后发表内容