Flutter如何集成AdMob广告
在Flutter项目中集成AdMob广告时遇到了一些问题,想请教大家:
- 需要安装哪些依赖包?是否有推荐的稳定版本?
- 如何在Android和iOS平台上分别配置AdMob?是否需要修改原生代码?
- 如何正确添加横幅广告、插页式广告和激励广告?有没有示例代码可以参考?
- 测试广告和正式广告的ID有什么区别?如何确保测试阶段不会触发违规?
- 遇到广告加载失败或显示异常时,有哪些常见的排查方法?
希望有经验的朋友能分享一下具体的步骤和注意事项,谢谢!
2 回复
在Flutter中集成AdMob,需先安装google_mobile_ads插件。在pubspec.yaml中添加依赖,配置Android的AndroidManifest.xml和iOS的Info.plist。初始化广告SDK后,使用BannerAd或InterstitialAd加载并显示广告。
更多关于Flutter如何集成AdMob广告的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成AdMob广告可以通过google_mobile_ads官方插件实现。以下是完整步骤:
1. 添加依赖
在pubspec.yaml中添加:
dependencies:
google_mobile_ads: ^2.0.0
2. 平台配置
Android
在AndroidManifest.xml中添加:
<manifest>
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
iOS
在Info.plist中添加:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
3. 初始化广告
在main.dart中初始化:
import 'package:google_mobile_ads/google_mobile_ads.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
MobileAds.instance.initialize();
runApp(MyApp());
}
4. 实现横幅广告
class BannerAdWidget extends StatefulWidget {
@override
_BannerAdWidgetState createState() => _BannerAdWidgetState();
}
class _BannerAdWidgetState extends State<BannerAdWidget> {
BannerAd? _bannerAd;
@override
void initState() {
super.initState();
_loadBannerAd();
}
void _loadBannerAd() {
_bannerAd = BannerAd(
adUnitId: 'ca-app-pub-3940256099942544/6300978111', // 测试ID
size: AdSize.banner,
request: AdRequest(),
listener: BannerAdListener(
onAdLoaded: (Ad ad) => print('广告加载成功'),
onAdFailedToLoad: (Ad ad, LoadAdError error) {
ad.dispose();
print('广告加载失败: $error');
},
),
)..load();
}
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: AdWidget(ad: _bannerAd!),
width: _bannerAd!.size.width.toDouble(),
height: _bannerAd!.size.height.toDouble(),
);
}
@override
void dispose() {
_bannerAd?.dispose();
super.dispose();
}
}
5. 实现插页广告
InterstitialAd? _interstitialAd;
void _loadInterstitialAd() {
InterstitialAd.load(
adUnitId: 'ca-app-pub-3940256099942544/1033173712',
request: AdRequest(),
adLoadCallback: InterstitialAdLoadCallback(
onAdLoaded: (InterstitialAd ad) {
_interstitialAd = ad;
},
onAdFailedToLoad: (LoadAdError error) {
print('插页广告加载失败: $error');
},
),
);
}
void _showInterstitialAd() {
if (_interstitialAd != null) {
_interstitialAd!.show();
}
}
注意事项
- 使用测试ID进行开发,上线前替换为真实ID
- 正确处理广告生命周期
- 遵守AdMob政策指南
- 在合适的位置显示广告,避免影响用户体验
记得在AdMob后台创建广告单元并获取对应的广告ID。

