Unity中Google Mobile Ads代码报错求助:RewardedAd相关4个错误
问题分析与解决方案
你的代码使用的是旧版Google Mobile Ads SDK的API,而当前使用的SDK版本(大概率是v8.x及以上)已更新了RewardedAd的核心API,导致出现这4个错误。以下是逐个问题的解决方式及修正后的完整代码:
错误原因与修复点
错误1:'RewardedAd' 不包含接受1个参数的构造函数
新版SDK中RewardedAd不再支持直接实例化,需通过静态方法RewardedAd.Create(rewardedUnitId)创建实例。错误2:'RewardedAd' 不包含 'OnAdLoaded' 的定义
事件名称已变更为AdLoaded,需绑定该事件替代旧版的OnAdLoaded。错误3:当前上下文中不存在名称 'HandleAdLoaded'
需自行实现符合AdLoadedEventHandler委托签名的回调方法。错误4:'RewardedAd' 不包含 'LoadAd' 的定义
v8.x及以上版本中,广告加载方法改为异步的LoadAsync,需通过异步任务调用。
修正后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; using System; using System.Threading.Tasks; public class AdShower : MonoBehaviour { private string rewardedUnitId = "MyId"; private RewardedAd rewardedAd; private void OnEnable() { // 创建RewardedAd实例(替代旧版构造函数) rewardedAd = RewardedAd.Create(rewardedUnitId); // 绑定广告加载完成事件 rewardedAd.AdLoaded += HandleAdLoaded; // 可选:绑定加载失败事件用于调试 rewardedAd.AdFailedToLoad += HandleAdFailedToLoad; AdRequest request = new AdRequest.Builder().Build(); // 异步加载广告 _ = LoadRewardedAdAsync(request); } // 实现广告加载完成的回调方法 private void HandleAdLoaded(object sender, EventArgs args) { Debug.Log("激励广告加载完成"); } // 实现广告加载失败的回调方法 private void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { Debug.Log($"激励广告加载失败:{args.LoadAdError.Message}"); } // 异步加载广告的封装方法 private async Task LoadRewardedAdAsync(AdRequest request) { try { await rewardedAd.LoadAsync(request); } catch (Exception e) { Debug.Log($"加载广告时发生异常:{e.Message}"); } } }
额外注意事项
- SDK版本兼容:若你使用的是v7.x版本SDK,加载方法仍为
LoadAd(request),但实例创建仍需用RewardedAd.Create,事件名称为AdLoaded。 - 类名冲突排查:若怀疑类名冲突,可使用完整命名空间声明变量:
private GoogleMobileAds.Api.RewardedAd rewardedAd;,避免与自定义的RewardedAd类混淆。
内容的提问来源于stack exchange,提问作者Dimonset
相关产品推荐
相关产品推荐

