如何在Flutter应用程序中集成谷歌移动广告

最近,flutter 宣布发布适用于 Flutter 的 Google 移动广告,这是一款与 AdMob 和 AdManager 配合使用的新 SDK,可提供各种广告格式,包括横幅广告、插页式广告、原生广告和用于 Flutter 的激励视频广告

我想通过 AdMob 展示广告来通过我的 Flutter 应用获利。我们如何在我们的 Flutter 应用程序中设置和集成谷歌移动广告

回答

Flutter 的 Google 移动广告 SDK 目前支持加载和显示横幅、插页式(全屏)、原生广告和激励视频广告

将 Google 移动广告 SDK 集成到 Flutter 应用程序中,您将在此处完成

先决条件:https : //pub.dev/packages/google_mobile_ads#prerequisites

添加 Google 移动广告插件作为依赖项

将Google 移动广告插件作为依赖项添加到pubspec.yaml 位于项目根目录的 文件中。

dependencies:
  google_mobile_ads: ^0.11.0+1

导入到您的 Dart 代码中,您可以使用:

import 'package:google_mobile_ads/google_mobile_ads.dart';

特定平台的设置

IOS

更新您的Info.plist

  1. ios/Runner/Info.plist 在 Android Studio 中打开 文件。

  2. 添加一个 GADApplicationIdentifier 包含您的 AdMob 应用 ID(在 AdMob 用户界面中标识)的字符串值的键,如下所示:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-################~##########</string>

安卓

更新AndroidManifest.xml

  1. android/app/src/main/AndroidManifest.xml 在 Android Studio 中打开 文件。

  2. 通过添加<meta-data> 标签并输入 来 添加您的 AdMob 应用 ID  com.google.android.gms.ads.APPLICATION_ID。如下所示。您可以在AdMob 用户界面中找到您的应用 ID 。对于 android:value 插入自己的AdMob应用ID在引号中,如下图所示。

     <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
     <meta-data
          android:name="com.google.android.gms.ads.APPLICATION_ID"
          android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    

AdMob 应用 ID 必须包含在 AndroidManifest.xml. 如果不这样做,将导致应用程序启动时崩溃。

初始化移动广告 SDK

在加载广告之前,让您的应用初始化移动广告 SDK,方法是调用 MobileAds.instance.initialize() 初始化 SDK 并返回 Future 初始化完成后(或 30 秒超时后)完成的 。这只需执行一次,最好在运行应用程序之前完成。

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // Load ads.
  }
}

这是一个添加横幅广告供所有人查看googleads-mobile-flutter

BannerAd 需要一个 adUnitId、一个 AdSize、一个 AdRequest和一个 AdListener。下面显示了一个示例,以及有关每个参数的更多信息。

final BannerAd myBanner = BannerAd(
  adUnitId: '<ad unit id>',
  size: AdSize.banner,
  request: AdRequest(),
  listener: AdListener(),
);

要定义自定义横幅尺寸,请设置所需的 AdSize,如下所示:

final AdSize adSize = AdSize(300, 50);

横幅广告事件 

通过使用 AdListener,您可以监听生命周期事件,例如广告关闭或用户离开应用程序。这个例子实现了每个方法并将一条消息记录到控制台:

final AdListener listener = AdListener(
 // Called when an ad is successfully received.
 onAdLoaded: (Ad ad) => print('Ad loaded.'),
 // Called when an ad request failed.
 onAdFailedToLoad: (Ad ad, LoadAdError error) {
   print('Ad failed to load: $error');
 },
 // Called when an ad opens an overlay that covers the screen.
 onAdOpened: (Ad ad) => print('Ad opened.'),
 // Called when an ad removes an overlay that covers the screen.
 onAdClosed: (Ad ad) => print('Ad closed.'),
 // Called when an ad is in the process of leaving the application.
 onApplicationExit: (Ad ad) => print('Left application.'),
);

BannerAd 被实例化后, load() 必须被调用才能显示在屏幕上。

myBanner.load();

要将显示BannerAd 为小部件,您必须AdWidget 在调用 load() 后使用受支持的广告实例化 a。您可以在调用之前创建小部件load(),但 load() 必须在将其添加到小部件树之前调用 。

final AdWidget adWidget = AdWidget(ad: myBanner);

AdWidget 继承自 Flutter 的 Widget 类,可以用作任何其他小部件。在 iOS 上,确保将小部件放置在具有指定宽度和高度的小部件中。否则,您的广告可能不会显示。BannerAd 可以将A 放置在尺寸与广告匹配的容器中:

final Container adContainer = Container(
  alignment: Alignment.center,
  child: adWidget,
  width: myBanner.size.width.toDouble(),
  height: myBanner.size.height.toDouble(),
);

最后,通过调用 回调方法中的BannerAd.dispose() 方法 释放与 BannerAd 对象关联的资源 dispose()

@override
void dispose() {
  // TODO: Dispose BannerAd object
  myBanner?.dispose();
  super.dispose();
}

就是这样!您的应用现在可以显示横幅广告了。

完整示例

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


void main() {
  runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyApp()));
}

// You can also test with your own ad unit IDs by registering your device as a
// test device. Check the logs for your device's ID value.
const String testDevice = 'YOUR_DEVICE_ID';

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  BannerAd _bannerAd;

  @override
  void initState() {
    super.initState();
    _bannerAd = BannerAd(
      adUnitId: BannerAd.testAdUnitId,
      request: AdRequest(),
      size: AdSize.banner,
      listener: AdListener(
        onAdLoaded: (Ad ad) {
          print('$BannerAd loaded.');
        },
        onAdFailedToLoad: (Ad ad, LoadAdError error) {
          print('$BannerAd failedToLoad: $error');
        },
        onAdOpened: (Ad ad) => print('$BannerAd onAdOpened.'),
        onAdClosed: (Ad ad) => print('$BannerAd onAdClosed.'),
        onApplicationExit: (Ad ad) => print('$BannerAd onApplicationExit.'),
      ),
    );

    _bannerAd?.load();
  }

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

  @override
  Widget build(BuildContext context) {
    final AdWidget adWidget = AdWidget(ad: _bannerAd);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Google Mobile Ads'),
        actions: <Widget>[
        ],
      ),
      body: Column(
        children: [
          Align(
            alignment: FractionalOffset.topCenter,
            child: Padding(
                padding: EdgeInsets.only(top: 10.0),
                child: Container(
                  alignment: Alignment.center,
                  child: adWidget,
                  width: _bannerAd.size.width.toDouble(),
                  height: _bannerAd.size.height.toDouble(),
                )
            ),
          )
        ],
      ),
    );
  }
}

  • This answer appears to have been copied from parts of https://developers.google.com/admob/flutter/quick-start and https://developers.google.com/admob/flutter/banner.

以上是如何在Flutter应用程序中集成谷歌移动广告的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>