Flutter如何集成AdMob广告

在Flutter项目中集成AdMob广告时遇到了一些问题,想请教大家:

  1. 需要安装哪些依赖包?是否有推荐的稳定版本?
  2. 如何在Android和iOS平台上分别配置AdMob?是否需要修改原生代码?
  3. 如何正确添加横幅广告、插页式广告和激励广告?有没有示例代码可以参考?
  4. 测试广告和正式广告的ID有什么区别?如何确保测试阶段不会触发违规?
  5. 遇到广告加载失败或显示异常时,有哪些常见的排查方法?

希望有经验的朋友能分享一下具体的步骤和注意事项,谢谢!

2 回复

在Flutter中集成AdMob,需先安装google_mobile_ads插件。在pubspec.yaml中添加依赖,配置Android的AndroidManifest.xml和iOS的Info.plist。初始化广告SDK后,使用BannerAdInterstitialAd加载并显示广告。

更多关于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。

回到顶部