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

如何解决如何在 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

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

  2. 添加一个 GADApplicationIdentifier 键,其中包含您的 AdMob 应用 ID (identified in the AdMob UI) 的字符串值,如下所示:

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

安卓

更新AndroidManifest.xml

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

  2. 通过添加 <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(),)
            ),)
        ],);
  }
}

enter image description here

,

第一步:在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。该插件支持多种 广告格式,包括横幅(内嵌和叠加)、插页式、 激励视频广告、原生广告和自适应横幅广告。

enter image description here

以下视频教程,Monetizing apps with Flutter, 展示了如何开始使用广告:

以下资源可以帮助您入门:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res