最近,flutter 宣布发布 Google Mobile Ads for Flutter 一个新的 SDK,它与 AdMob 和 AdManager 一起提供多种广告格式,包括用于 Flutter 的横幅、插页式、原生和奖励视频广告
我想通过 AdMob 展示广告来通过我的 Flutter 应用获利。我们如何在 Flutter 应用中设置和集成谷歌移动广告
最近,flutter 宣布发布 Google Mobile Ads for Flutter 一个新的 SDK,它与 AdMob 和 AdManager 一起提供多种广告格式,包括用于 Flutter 的横幅、插页式、原生和奖励视频广告
我想通过 AdMob 展示广告来通过我的 Flutter 应用获利。我们如何在 Flutter 应用中设置和集成谷歌移动广告
适用于 Flutter 的 Google 移动广告 SDK 目前支持加载和显示横幅、插页式(全屏)、原生广告和激励视频广告
将 Google Mobile Ads SDK 集成到 Flutter 应用程序中,您将在此处执行此操作
对于先决条件:https ://pub.dev/packages/google_mobile_ads#prerequisites
将 Google Mobile Ads 插件添加为依赖项
将Google Mobile Ads插件作为依赖项添加到 pubspec.yaml
位于项目根目录的文件中。
dependencies:
google_mobile_ads: ^0.11.0+1
在你的 Dart 代码中导入,你可以使用:
import 'package:google_mobile_ads/google_mobile_ads.dart';
特定平台的设置
iOS
更新您的Info.plist
ios/Runner/Info.plist
在 Android Studio 中打开 文件。
添加一个 GADApplicationIdentifier
键,其字符串值是您的 AdMob 应用 ID(在 AdMob 用户界面中标识),如下所示:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-################~##########</string>
安卓
更新AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
在 Android Studio 中打开 文件。
通过添加 <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
在加载广告之前,让您的应用通过调用 MobileAds.instance.initialize()
which 来初始化 Mobile Ads SDK,该 SDK 初始化 SDK 并在 Future
初始化完成后(或在 30 秒超时后)返回完成的 a。这只需要做一次,最好是在运行应用程序之前。
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
A 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.'),
);
a BannerAd
被实例化后, load()
必须先调用它才能显示在屏幕上。
myBanner.load();
要将 a 显示为 BannerAd
小部件,您必须 AdWidget
在调用 load() 后使用支持的广告实例化 a。您可以在调用之前创建小部件 load()
,但 load()
必须在将其添加到小部件树之前调用。
final AdWidget adWidget = AdWidget(ad: myBanner);
AdWidget
继承自 Flutter 的 Widget 类,可以用作任何其他小部件。在 iOS 上,确保将小部件放置在具有指定宽度和高度的小部件中。否则,您的广告可能不会展示。A BannerAd
可以放置在尺寸与广告相匹配的容器中:
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(),
)
),
)
],
),
);
}
}
第 1 步:将依赖项添加到 pubspec.yaml
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
google_mobile_ads: ^0.13.0 #this
第 2 步:在 IOS 中更新 Info.plist 并在 Android 中更新 AndroidManifest.xml
IOS
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
</array>
安卓版
<manifest>
<application>
<!-- 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"/>
</application>
</manifest>
第 2 步:在 main.dart 中初始化移动广告 SDK
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await MobileAds.instance.initialize().then((InitializationStatus status) {
print('Initialization done: ${status.adapterStatuses}');
MobileAds.instance.updateRequestConfiguration(
RequestConfiguration(
tagForChildDirectedTreatment:
TagForChildDirectedTreatment.unspecified,
testDeviceIds: <String>[]),//when you run first time you will get your test id in logs then update it here <String>["test id"]
);
});
runApp(MyApp());
}
第 4 步:在 Admob 中创建广告单元,然后我们就可以实施广告了
第 5 步:确保在 app/build.gradle 文件中启用 multidex
defaultConfig {
....
minSdkVersion 19
multiDexEnabled true
}
dependencies {
....
implementation 'com.android.support:multidex:2.0.1'
}
第 6 步:创建 admanager.dart 文件
import 'package:google_mobile_ads/google_mobile_ads.dart';
AdRequest request = AdRequest(
keywords: <String>[
'foo',
'bar',
'wallpaper',
],
contentUrl: 'URL',
nonPersonalizedAds: true,
);
final BannerAd myBanner = BannerAd(
adUnitId: 'ca-app-pub-3166882328175414/3480332744',
size: AdSize.banner,
request: request,
listener: BannerAdListener(
onAdLoaded: (Ad ad) {
print('$BannerAd loaded.');
},
onAdFailedToLoad: (Ad ad, LoadAdError error) {
print('$BannerAd failedToLoad: $error');
ad.dispose();
},
onAdOpened: (Ad ad) => print('$BannerAd onAdOpened.'),
onAdClosed: (Ad ad) => print('$BannerAd onAdClosed.'),
),
);
final AdWidget adWidget = AdWidget(ad: myBanner);
第7步:现在去主页使用它
import 'package:flutter/material.dart';
import 'package:vaccine/adManger.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
myBanner.load();
super.initState();
}
final Container adContainer = Container(
alignment: Alignment.center,
child: adWidget,
width: myBanner.size.width.toDouble(),
height: myBanner.size.height.toDouble(),
);
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
adContainer,
],
),
),
);
}
}
谢谢
google_mobile_ads:^1.0.1
导入“包:google_mobile_ads/google_mobile_ads.dart”;
-minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
-targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()
更新 Kotlin 版本
ext.kotlin_version = '1.6.0'
好在有一个现有的关于 Flutter 的 Ads 支持的文档。
通过使用广告将应用程序货币化一直是许多 Flutter 开发人员最流行的请求之一。
Flutter 广告支持可通过适用于 AdMob 和 AdManager的Google Mobile Ads SDK for Flutter(测试版)获得。该插件支持多种广告格式,包括横幅(内嵌和叠加)、插页式、奖励视频、原生广告和自适应横幅。
以下视频教程,使用 Flutter 将应用程序货币化,展示了如何开始使用广告:
以下资源可以帮助您入门:
- 要获取 Flutter 的 Google 移动广告 SDK,请从 pub.dev 下载google_mobile_ads 插件 。
- 有关使用 AdMob 或 AdManager 创建和加载广告的说明,请参阅详细的实施指南。
- 要了解如何实施重叠式横幅广告、插页式广告和激励广告,请参阅将 AdMob 广告添加到 Flutter 应用 代码实验室。
- 要了解如何实现内联横幅和原生广告,请参阅将 AdMob 横幅和原生内联广告添加到 Flutter 应用程序 代码实验室。
- 如果您在测试版中遇到任何问题,请提交问题。