You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3d中AdMob测试激励广告无法显示问题求助

完善你的Unity激励视频广告实现方案

嘿,我看你已经搭好了Unity里AdMob激励视频广告的基础框架,接下来咱们把剩下的部分补全,让两个按钮的功能都正常跑起来~

首先给你补全并优化后的完整代码,里面包含了广告请求、展示、状态回调的全部逻辑:

using GoogleMobileAds.Api;
using UnityEngine;
using System;

public class AdManager : MonoBehaviour
{
    // 激励视频广告实例
    private RewardBasedVideoAd _rewardedAd;
    // 广告ID(测试阶段用官方测试ID,上线替换成自己的)
    private string _adUnitId = "ca-app-pub-3940256099942544/5224354917";

    void Start()
    {
        // 获取激励视频单例对象
        _rewardedAd = RewardBasedVideoAd.Instance;
        // 注册广告全生命周期的回调事件
        RegisterAdCallbacks();
        // 启动时自动请求第一条广告
        RequestRewardedVideo();
    }

    // 注册广告各个阶段的回调
    private void RegisterAdCallbacks()
    {
        _rewardedAd.OnAdLoaded += HandleAdLoaded;
        _rewardedAd.OnAdFailedToLoad += HandleAdLoadFailed;
        _rewardedAd.OnAdRewarded += HandleUserRewarded;
        _rewardedAd.OnAdClosed += HandleAdClosed;
        _rewardedAd.OnAdOpening += HandleAdOpened;
        _rewardedAd.OnAdStarted += HandleAdStarted;
        _rewardedAd.OnAdLeavingApplication += HandleAppLeft;
    }

    // 【第一个按钮绑定的方法】请求激励视频广告
    public void RequestRewardedVideo()
    {
        Debug.Log("正在请求激励视频广告...");
        // 构建广告请求,添加测试设备避免真实计费
        AdRequest adRequest = new AdRequest.Builder()
            .AddTestDevice(AdRequest.TestDeviceSimulator) // 模拟器作为测试设备
            .AddTestDevice("你的测试设备ID") // 替换成Unity控制台打印的设备ID
            .Build();

        // 发送加载请求
        _rewardedAd.LoadAd(adRequest, _adUnitId);
    }

    // 【第二个按钮绑定的方法】展示已加载的激励视频广告
    public void ShowRewardedVideo()
    {
        if (_rewardedAd.IsLoaded())
        {
            Debug.Log("展示激励视频广告");
            _rewardedAd.Show();
        }
        else
        {
            Debug.LogWarning("广告还没加载完成,请先点击请求按钮!");
        }
    }

    // 广告加载成功回调
    private void HandleAdLoaded(object sender, EventArgs args)
    {
        Debug.Log("激励视频广告加载成功!");
    }

    // 广告加载失败回调
    private void HandleAdLoadFailed(object sender, AdFailedToLoadEventArgs args)
    {
        Debug.LogError($"广告加载失败:{args.Message}");
        // 这里可以加重试逻辑,比如间隔几秒后重新请求
    }

    // 用户看完广告获得奖励的回调(核心逻辑在这里)
    private void HandleUserRewarded(object sender, Reward args)
    {
        Debug.Log($"用户获得奖励:{args.Type} × {args.Amount}");
        // 在这里写你的奖励逻辑,比如给玩家加金币、解锁道具等
    }

    // 广告关闭回调(不管用户有没有看完)
    private void HandleAdClosed(object sender, EventArgs args)
    {
        Debug.Log("广告已关闭");
        // 关闭后自动请求下一条广告,保证下次有广告可用
        RequestRewardedVideo();
    }

    // 广告打开回调
    private void HandleAdOpened(object sender, EventArgs args)
    {
        Debug.Log("广告已打开");
    }

    // 广告开始播放回调
    private void HandleAdStarted(object sender, EventArgs args)
    {
        Debug.Log("广告开始播放");
    }

    // 用户点击广告跳转到外部应用的回调
    private void HandleAppLeft(object sender, EventArgs args)
    {
        Debug.Log("用户离开应用");
    }
}

关键细节说明

  • 命名规范:把你的adManager改成了AdManager,符合C#大驼峰命名习惯,避免潜在的命名冲突。
  • 测试ID使用:代码里用了AdMob官方的测试激励视频ID,开发阶段一定要用测试ID,否则会触发AdMob的政策警告,上线前记得替换成你在AdMob后台创建的真实广告ID。
  • 按钮绑定:
    • 第一个按钮的点击事件直接绑定到RequestRewardedVideo方法,负责发起广告请求。
    • 第二个按钮绑定到ShowRewardedVideo方法,会先检查广告是否加载完成再展示,避免报错。
  • 测试设备配置:第一次运行应用时,Unity控制台会打印出你的设备ID,把它替换掉代码里的你的测试设备ID,这样在真机测试时也不会产生真实计费。
  • 自动续请求:广告关闭后自动调用RequestRewardedVideo,保证用户下次点击展示按钮时,大概率有可用的广告。

额外注意事项

  • 确保你已经正确导入Google Mobile Ads插件,并且在GoogleMobileAdsSettings里配置了你的AdMob应用ID。
  • 奖励逻辑一定要写在HandleUserRewarded回调里,只有这个回调触发时,才说明用户真正完成了广告观看,避免作弊。

内容的提问来源于stack exchange,提问作者Timbelion Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:55:39