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
相关产品推荐
相关产品推荐

