Unity游戏中如何检查MobileAds.Initialize方法是否调用成功?
正确检查Unity中AdMob MobileAds.Initialize是否成功的方法
首先要明确:MobileAds.Initialize的回调触发不代表广告能正常加载,它只是AdMob SDK自身完成基础初始化的信号——哪怕没有网络,SDK也能完成自身初始化,这就是你之前在回调里设置布尔值一直返回true的原因。
要正确判断初始化是否成功,得利用回调里的InitializationStatus参数,它包含了各个广告适配器的初始化状态,具体做法如下:
通过
initStatus.getAdapterStatusMap()获取所有适配器的状态,重点关注AdMob对应的适配器(不同平台名称可能略有差异,可根据日志调整),检查其初始化状态:MobileAds.Initialize((InitializationStatus initStatus) => { bool isAdMobAdapterInitialized = false; foreach (var adapterEntry in initStatus.getAdapterStatusMap()) { string adapterName = adapterEntry.Key; AdapterStatus status = adapterEntry.Value; // 过滤AdMob适配器 if (adapterName.Contains("AdMob") || adapterName.Contains("google")) { if (status.InitializationState == AdapterState.Initialized) { isAdMobAdapterInitialized = true; Debug.Log("AdMob适配器初始化成功"); } else { Debug.Log($"AdMob适配器初始化失败: {status.Description}"); } } } // 仅当AdMob适配器初始化成功时,再尝试加载插屏广告 if (isAdMobAdapterInitialized) { LoadInterstitialAd(); } });结合网络状态处理后续逻辑:
- 维护一个全局布尔变量
isSdkInitialized,根据上面的适配器状态结果赋值; - 监听设备网络状态变化(用Unity自带的
NetworkReachability即可),当网络从无变为可用时:- 如果
isSdkInitialized为false,重新调用MobileAds.Initialize(); - 如果
isSdkInitialized为true,直接调用LoadInterstitialAd()尝试加载广告;
- 如果
- 在插屏广告的加载回调中,通过
LoadAdError判断失败原因:如果是网络类错误(比如ERROR_CODE_NETWORK_ERROR),可以在网络恢复后自动重试;如果是其他错误(比如广告库存不足),则无需重复加载。
- 维护一个全局布尔变量
另外,你之前用插屏广告是否加载成功来判断初始化状态的思路不可取,因为广告加载失败可能是网络、库存等多种原因,和SDK初始化状态无关,两者要分开处理。
内容的提问来源于stack exchange,提问作者Kaan Selçuk Karaböce
相关产品推荐
相关产品推荐

