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

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();
        }
    });
    
  • 结合网络状态处理后续逻辑:

    1. 维护一个全局布尔变量isSdkInitialized,根据上面的适配器状态结果赋值;
    2. 监听设备网络状态变化(用Unity自带的NetworkReachability即可),当网络从无变为可用时:
      • 如果isSdkInitialized为false,重新调用MobileAds.Initialize();
      • 如果isSdkInitialized为true,直接调用LoadInterstitialAd()尝试加载广告;
    3. 在插屏广告的加载回调中,通过LoadAdError判断失败原因:如果是网络类错误(比如ERROR_CODE_NETWORK_ERROR),可以在网络恢复后自动重试;如果是其他错误(比如广告库存不足),则无需重复加载。

另外,你之前用插屏广告是否加载成功来判断初始化状态的思路不可取,因为广告加载失败可能是网络、库存等多种原因,和SDK初始化状态无关,两者要分开处理。

内容的提问来源于stack exchange,提问作者Kaan Selçuk Karaböce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:10:05