如何解决如何在 Flutter 应用程序中集成谷歌移动广告
最近 Flutter 宣布发布适用于 Flutter 的 Google 移动广告,这是一种与 AdMob 和 AdManager 配合使用的新 SDK,可提供各种广告格式,包括横幅广告、插页式广告、原生广告和用于 Flutter 的激励视频广告
我想通过 AdMob 展示广告来通过我的 Flutter 应用获利。我们如何在我们的 Flutter 应用程序中设置和集成谷歌移动广告
解决方法
Google Mobile Ads SDK for Flutter 目前支持加载和显示横幅、插页式(全屏)、原生广告和激励视频广告
将 Google 移动广告 SDK 集成到 Flutter 应用程序中,您将在此处完成
对于先决条件:https://pub.dev/packages/google_mobile_ads#prerequisites
添加 Google 移动广告插件作为依赖项
将 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
-
在 Android Studio 中打开
ios/Runner/Info.plist
文件。 -
添加一个
GADApplicationIdentifier
键,其中包含您的 AdMob 应用 ID (identified in the AdMob UI) 的字符串值,如下所示:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-################~##########</string>
安卓
更新AndroidManifest.xml
-
在 Android Studio 中打开
android/app/src/main/AndroidManifest.xml
文件。 -
通过添加
<meta-data>
标记并输入com.google.android.gms.ads.APPLICATION_ID
来添加您的 AdMob 应用 ID。如下所示。您可以在 AdMob UI 中找到您的应用 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()
来初始化移动广告 SDK,这会初始化 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
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.'),);
在实例化 BannerAd
后,必须先调用 load()
,然后它才能显示在屏幕上。
myBanner.load();
要将BannerAd
显示为小部件,您必须在调用 load() 后使用受支持的广告实例化 AdWidget
。您可以在调用 load()
之前创建小部件,但必须在将其添加到小部件树之前调用 load()
。
final AdWidget adWidget = AdWidget(ad: myBanner);
AdWidget
继承自 Flutter 的 Widget 类,可用作任何其他小部件。在 iOS 上,确保将小部件放置在具有指定宽度和高度的小部件中。否则,您的广告可能不会显示。可以将 BannerAd
放置在尺寸与广告匹配的容器中:
final Container adContainer = Container(
alignment: Alignment.center,child: adWidget,width: myBanner.size.width.toDouble(),height: myBanner.size.height.toDouble(),);
最后,通过调用 BannerAd.dispose()
回调方法中的 dispose()
方法释放与 BannerAd 对象关联的资源。
@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,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,width: _bannerAd.size.width.toDouble(),height: _bannerAd.size.height.toDouble(),)
),)
],);
}
}
,
第一步:在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 {
....
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',request: request,listener: BannerAdListener(
onAdLoaded: (Ad ad) {
print('$BannerAd loaded.');
},LoadAdError error) {
print('$BannerAd failedToLoad: $error');
ad.dispose();
},);
final AdWidget adWidget = AdWidget(ad: myBanner);
第七步:现在去主页使用它
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,);
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
adContainer,);
}
}
谢谢
,好消息是 Ads support for Flutter 的现有文档。
使用广告通过应用获利是最受欢迎的要求之一 对于许多 Flutter 开发者。
Flutter 广告支持可通过 Google Mobile Ads SDK for Flutter (Beta) 获得,其中 适用于 AdMob 和 AdManager。该插件支持多种 广告格式,包括横幅(内嵌和叠加)、插页式、 激励视频广告、原生广告和自适应横幅广告。
以下视频教程,Monetizing apps with Flutter, 展示了如何开始使用广告:
以下资源可以帮助您入门:
- 要获取适用于 Flutter 的 Google 移动广告 SDK,请下载 google_mobile_ads plugin 来自 pub.dev。
- 有关使用 AdMob 或 AdManager 创建和加载广告的说明,请参阅 detailed implementation guide。
- 要了解如何实施重叠式横幅广告、插页式广告和激励广告,请参阅Adding AdMob ads to a Flutter app 代码实验室。
- 要了解如何实施内嵌横幅广告和原生广告,请参阅Adding AdMob banner and native inline ads to a Flutter app 代码实验室。
- 如果您在使用 Beta 版时遇到任何问题,请file an issue。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。