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

Flutter集成AdMob遇加载错误代码3,请求排查问题

Flutter AdMob 广告加载失败(错误代码3)排查方案

问题情况

尝试在Flutter应用中集成AdMob,但始终遇到广告加载失败错误代码3,即使使用测试ID也无法解决。以下是相关代码、配置及报错日志:

代码实现

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // MobileAds.instance.updateRequestConfiguration(
  //   RequestConfiguration(
  //       testDeviceIds: <String>['my test id-i removed this for now']),
  // );
  MobileAds.instance.initialize();
  runApp(MaterialApp(
    home: CustomBannerAd(),
  ));
}

class CustomBannerAd extends StatefulWidget {
  @override
  State<CustomBannerAd> createState() => _CustomBannerAdState();
}

class _CustomBannerAdState extends State<CustomBannerAd> {
  BannerAd? _bannerAd;

  final _adUnitId = Platform.isAndroid
      ? 'XXX'
      : 'XXX';

  @override
  void initState() {
    super.initState();
    _loadAd();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [
          if (_bannerAd != null)
            Align(
              alignment: Alignment.bottomCenter,
              child: SafeArea(
                child: SizedBox(
                  width: _bannerAd!.size.width.toDouble(),
                  height: _bannerAd!.size.height.toDouble(),
                  child: AdWidget(ad: _bannerAd!),
                ),
              ),
            )
        ],
      ),
    );
  }

  void _loadAd() async {
    BannerAd(
      adUnitId: _adUnitId,
      request: const AdRequest(),
      size: AdSize.banner,
      listener: BannerAdListener(
        onAdLoaded: (ad) {
          setState(() {
            _bannerAd = ad as BannerAd;
          });
        },
        onAdFailedToLoad: (ad, err) {
          ad.dispose();
        },
        onAdOpened: (Ad ad) {},
        onAdClosed: (Ad ad) {},
        onAdImpression: (Ad ad) {},
      ),
    ).load();
  }

  @override
  void dispose() {
    _bannerAd?.dispose();
    super.dispose();
  }
}

AndroidManifest配置

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="XXX"/>

报错日志

W/ConnectionStatusConfig( 1691): Dynamic lookup for intent failed for action: com.google.android.gms.ads.service.CACHE
W/ConnectionStatusConfig( 1691): Dynamic lookup for intent failed for action: com.google.android.gms.ads.service.START
I/Ads     ( 1691): Ad failed to load : 3

排查解决步骤

  • 使用官方测试ID:替换代码中的XXX为AdMob官方测试ID:
    • Android Banner测试ID:ca-app-pub-3940256099942544/6300978111
    • iOS Banner测试ID:ca-app-pub-3940256099942544/2934735716
  • 等待Ads初始化完成再加载广告:MobileAds.instance.initialize()是异步操作,需等待完成后再请求广告,修改代码如下:
    @override
    void initState() {
      super.initState();
      _initAdsAndLoad();
    }
    
    Future<void> _initAdsAndLoad() async {
      await MobileAds.instance.initialize();
      // 配置测试设备ID(可从日志获取设备ID,避免账号被限制)
      await MobileAds.instance.updateRequestConfiguration(
        RequestConfiguration(
          testDeviceIds: ['你的测试设备ID'],
        ),
      );
      _loadAd();
    }
    
  • 验证应用ID正确性:AndroidManifest中的com.google.android.gms.ads.APPLICATION_ID需替换为AdMob后台申请的真实应用ID,格式为ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy
  • 添加必要权限:在AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
  • 更新Google Play服务:确保设备上的Google Play服务为最新版本,日志中的动态查找失败错误通常与旧版本服务有关
  • 完善错误日志:在onAdFailedToLoad中打印详细错误信息,帮助定位问题:
    onAdFailedToLoad: (ad, err) {
      print('广告加载失败详情: ${err.message}, 错误代码: ${err.code}');
      ad.dispose();
    },
    
  • 检查网络连接:确保设备处于稳定的网络环境中,AdMob广告加载依赖网络

内容的提问来源于stack exchange,提问作者Thanos Rom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:59