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

Flutter中如何加载并展示AdX AnchoredAdaptiveAd广告?

Flutter双平台加载AdX AnchoredAdaptiveAd失败解决方案

一、补全双平台基础配置

你提到已配置Android Manifest的应用ID,但需确保iOS和Android的配置都完整:

  • Android:
    • 确认AndroidManifest.xml里的应用ID格式正确:
      <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-你的应用ID~后缀"/>
      
    • 检查app/build.gradle的广告SDK版本,建议用最新稳定版:com.google.android.gms:play-services-ads:22.6.0+
  • iOS:
    • Info.plist必须添加GADApplicationIdentifier字段(值为你的应用ID),同时补上AdX所需的SKAdNetworkItems配置(可直接复制Google官方的SKAdNetwork列表)
    • Podfile里指定最新版SDK:pod 'Google-Mobile-Ads-SDK', '~> 10.0',执行pod install后重启Xcode

二、先用测试广告验证

真实广告单元可能因未审核、无填充导致失败,先替换成Google官方测试ID:

  • Android测试单元ID:ca-app-pub-3940256099942544/6300978111
  • iOS测试单元ID:ca-app-pub-3940256099942544/2934735716
    如果测试广告能加载,说明问题出在真实广告单元,去AdMob后台检查审核状态或广告填充情况。

三、代码逻辑排查(重点)

加载器未隐藏说明广告加载回调未触发,检查以下几点:

  1. 初始化是否正确
    必须在启动时完成Mobile Ads初始化,并确认初始化结果:

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      // 加回调查看初始化状态
      await MobileAds.instance.initialize().then((status) {
        print('广告SDK初始化状态: ${status.adapterStatuses}');
      });
      runApp(const MyApp());
    }
    

    如果初始化失败,控制台会打印具体错误,比如依赖缺失、应用ID错误。

  2. 必须处理加载失败场景
    仅处理加载成功会导致加载器一直显示,失败时也要隐藏加载器:

    late AnchoredAdaptiveBannerAd _ad;
    bool _showLoader = true;
    bool _adLoaded = false;
    
    void loadAd() async {
      try {
        _ad = await AnchoredAdaptiveBannerAd.load(
          adUnitId: Platform.isAndroid ? '测试ID' : '测试ID',
          request: const AdRequest(),
          adSize: AdSize.currentOrientationAnchoredAdaptiveBannerAdSize(
            MediaQuery.of(context).size.width.truncate(),
          ),
          listener: AnchoredAdaptiveBannerAdListener(
            onAdLoaded: (ad) {
              setState(() {
                _adLoaded = true;
                _showLoader = false;
              });
            },
            onAdFailedToLoad: (ad, error) {
              ad.dispose(); // 必须释放资源
              setState(() {
                _showLoader = false; // 失败也要关闭加载器
                print('广告加载失败: $error');
              });
            },
          ),
        );
      } catch (e) {
        setState(() {
          _showLoader = false;
          print('加载广告抛出异常: $e');
        });
      }
    }
    
  3. UI渲染逻辑要匹配状态
    确保根据状态正确渲染内容:

    @override
    Widget build(BuildContext context) {
      if (_showLoader) {
        return const Center(child: CircularProgressIndicator());
      }
      if (_adLoaded) {
        return SizedBox(
          width: _ad.size.width.toDouble(),
          height: _ad.size.height.toDouble(),
          child: AdWidget(ad: _ad),
        );
      }
      return const Center(child: Text('广告加载失败'));
    }
    

四、权限与网络检查

  • Android:AndroidManifest.xml里必须添加<uses-permission android:name="android.permission.INTERNET"/>,Android 13+需确保授予网络权限
  • iOS:Info.plist里添加网络配置,允许广告请求(测试阶段可临时放开HTTP):
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>
    

五、日志定位具体问题

打开Flutter控制台,搜索Ads关键词,根据错误码排查:

  • ERROR_CODE_NO_FILL:无广告填充,换测试ID或等待AdX审核
  • ERROR_CODE_INVALID_REQUEST:请求无效,检查应用ID、广告单元ID是否正确
  • ERROR_CODE_NETWORK_ERROR:网络问题,检查设备网络连接

内容的提问来源于stack exchange,提问作者Devid jons

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:48