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
- Android Banner测试ID:
- 等待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
相关产品推荐
相关产品推荐

