搜索插件、代码仓与 APP 分类

插件详情v0.11.1

flutter_google_ad_manager

Google Ad Manager(DoubleClick for Publishers)的 Flutter 插件。

近 30 天下载
60
喜欢数
20
Pub 分数
40

安装插件

flutter pub add flutter_google_ad_manager

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter 插件,可实现与 Google Ad Manager(前身为 DoubleClick for Publishers)的集成,使开发者能够在其 Flutter 应用中展示广告。该插件提供了与原生广告 SDK 的桥梁,支持横幅广告、插屏广告和激励视频广告。通过简单直观的 API,该插件简化了广告的集成,同时保持跨平台兼容性。该插件专为希望通过 Google 生态系统进行程序化广告变现的应用而设计。

适合场景

  • 通过展示广告 monetizing 移动应用
  • 实施激励视频广告以提高用户参与度
  • 在应用布局中显示横幅广告
  • 在应用屏幕之间集成插页广告
  • 使用 Google Ad Manager 提供定向广告
  • 通过程序化竞价启用广告收入

主要特点

  • 支持横幅、插页和激励视频广告
  • 与 Google Ad Manager 的轻松集成
  • 跨平台广告投放
  • 实时广告获取和渲染
  • 广告事件回调,用于跟踪性能
  • 符合 Google AdMob 政策

适合对象

  • 寻求广告变现的应用程序
  • 使用 Google Ad Manager 进行广告库存的开发者
  • 面向全球受众的Flutter应用
  • 管理多个广告网络的发布商
  • 需要高广告填充率的应用
  • 需要可靠广告表现追踪的项目

使用建议

  • 需要设置 Google Ad Manager 帐号
  • 需要来自出版商仪表板的正确广告单元ID
  • 可能需要遵守像GDPR这样的隐私法规
  • 性能取决于网络连接
  • 广告内容必须遵守谷歌的广告政策
  • iOS 和 Android 清单文件需要额外配置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

flutter_google_ad_manager

Flutter plugin for Google Ad Manager(DoubleClick for Publishers).

Getting Started

ios

Add io.flutter.embedded_views_preview in info.plist

<key>io.flutter.embedded_views_preview</key>
<true/>

Follow any additional instructions found here

Google Ad Manager Getting Started Guide

Android

Add com.google.android.gms.ads.AD_MANAGER_APP in AndroidManifest.xml

<manifest>
    <application>
        <meta-data
            android:name="com.google.android.gms.ads.AD_MANAGER_APP"
            android:value="true"/>
    </application>
</manifest>

Follow any additional instructions found here

Google Ad Manager Getting Started Guide

Banner Ads

Just write the DFPBanner widget in your favorite place.

DFPBanner(
  isDevelop: true,
  testDevices: MyTestDevices(),
  adUnitId: '/XXXXXXXXX/XXXXXXXXX',
  adSize: DFPAdSize.BANNER,
  onAdLoaded: () {
    print('Banner onAdLoaded');
  },
  onAdFailedToLoad: (errorCode) {
    print('Banner onAdFailedToLoad: errorCode:$errorCode');
  },
  onAdOpened: () {
    print('Banner onAdOpened');
  },
  onAdClosed: () {
    print('Banner onAdClosed');
  },
  onAdLeftApplication: () {
    print('Banner onAdLeftApplication');
  },
),

Manual Ad Refresh

You can manually refresh the banner ads on user interaction, use the onAdViewCreated callback to save an instance of the DFPBannerViewController and then call the reload() method to refresh the ad.

DFPBannerViewController _bannerViewController;

_reload() {
  _bannerViewController?.reload();
}

DFPBanner(
  isDevelop: true,
  testDevices: MyTestDevices(),
  adUnitId: '/XXXXXXXXX/XXXXXXXXX',
  adSize: DFPAdSize.BANNER,
  onAdViewCreated: (controller) {
    _bannerViewController = controller;
  },
  onAdLoaded: () {
    print('Banner onAdLoaded');
  },
  onAdFailedToLoad: (errorCode) {
    print('Banner onAdFailedToLoad: errorCode:$errorCode');
  },
  onAdOpened: () {
    print('Banner onAdOpened');
  },
  onAdClosed: () {
    print('Banner onAdClosed');
  },
  onAdLeftApplication: () {
    print('Banner onAdLeftApplication');
  },
),

About testDevices

If you set isDevelop to true, the test adUnitId will be used.
( If set false, the described adUnitId is used.)
Google Ad Manger needs to register testDevices in case of actual devices.

With this plug-in, you can create the following class and set it to testDevices of DFPBanner.

class MyTestDevices extends TestDevices {
  static MyTestDevices _instance;

  factory MyTestDevices() {
    if (_instance == null) _instance = new MyTestDevices._internal();
    return _instance;
  }

  MyTestDevices._internal();

  @override
  List<String> get values => List()..add("XXXXXXXX"); // Set here.
}
DFPBanner(
  testDevices: MyTestDevices(),
)

About adSize

DFPAdSize is available. This is the same size as that of android.

  • BANNER
  • FULL_BANNER
  • LARGE_BANNER
  • LEADERBOARD
  • MEDIUM_RECTANGLE
  • SMART_BANNER (Only Portrait)

Other custom is also available.

const DFPAdSize.custom({double width, double height}).

Note: In case of Android, DFPAdSize.custom() will be toInt () instead of double because AdSize class constructor of Google Ad Manager SDK is only int.

About EventListener

The following event listeners are available:

  • onAdLoaded
  • onAdFailedToLoad
  • onAdOpened
  • onAdClosed
  • onAdLeftApplication

Interstitial Ads

Firstly load it and call the show method at the desired timing.

DFPInterstitialAd _interstitialAd;

@override
void initState() {
  super.initState();

  _interstitialAd = DFPInterstitialAd(
    isDevelop: true,
    adUnitId: "XXXXXXXX",
    onAdLoaded: () {
      print('interstitialAd onAdLoaded');
    },
    onAdFailedToLoad: (errorCode) {
      print('interstitialAd onAdFailedToLoad: errorCode:$errorCode');
    },
    onAdOpened: () {
      print('interstitialAd onAdOpened');
    },
    onAdClosed: () {
      print('interstitialAd onAdClosed');
      interstitialAd.load();
    },
    onAdLeftApplication: () {
      print('interstitialAd onAdLeftApplication');
    },
  );
  _interstitialAd.load();
}

@override
void dispose() {
  _interstitialAd.dispose();
  super.dispose();
}
await interstitialAd.show();

About isDevelop

If you set isDevelop to true, the test adUnitId will be used.
( If set false, the described adUnitId is used.)

About EventListener

The following event listeners are available:

  • onAdLoaded
  • onAdFailedToLoad
  • onAdOpened
  • onAdClosed
  • onAdLeftApplication

Rewarded Ads

firstly load it and call the show method at the desired timing.

DFPRewardedAd _rewardedAd;
LifecycleEventHandler _lifecycle;

@override
void initState() {
  super.initState();
  _rewardedAd = DFPRewardedAd(
    isDevelop: true,
    adUnitId: "XXXXXXX",
    onAdLoaded: () {
      print('rewardedAd onAdLoaded');
    },
    onAdFailedToLoad: (errorCode) {
      print('rewardedAd onAdFailedToLoad: errorCode:$errorCode');
    },
    onAdOpened: () {
      print('rewardedAd onAdOpened');
    },
    onAdClosed: () {
      print('rewardedAd onAdClosed');
      _rewardedAd.load();
    },
    onAdLeftApplication: () {
      print('rewardedAd onAdLeftApplication');
    },
    onRewarded: (String type, int amount) {
      print('rewardedAd onRewarded: type:$type amount:$amount');
    },
    onVideoStarted: () {
      print('rewardedAd onVideoStarted');
    },
    onVideoCompleted: () {
      print('rewardedAd onVideoCompleted');
    },
  );
  _rewardedAd.load();
  _lifecycle = LifecycleEventHandler(_rewardedAd);
  WidgetsBinding.instance.addObserver(_lifecycle);
}

@override
void dispose() {
  WidgetsBinding.instance.removeObserver(_lifecycle);
  _rewardedAd.dispose();
  super.dispose();
}
await _rewardedAd.show();

It is necessary to call it when resumed and paused, respectively. For that, please implement WidgetsBindingObserver.

class LifecycleEventHandler extends WidgetsBindingObserver {
  final DFPRewardedAd rewardedAd;

  LifecycleEventHandler(this.rewardedAd);

  @override
  didChangeAppLifecycleState(AppLifecycleState state) async {
    switch (state) {
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.paused:
        await rewardedAd.pause();
        break;
      case AppLifecycleState.suspending:
        break;
      case AppLifecycleState.resumed:
        await rewardedAd.resume();
        break;
    }
  }
}

About isDevelop

If you set isDevelop to true, the test adUnitId will be used.
( If set false, the described adUnitId is used.)

About EventListener

The following event listeners are available:

  • onAdLoaded
  • onAdFailedToLoad
  • onAdOpened
  • onAdClosed
  • onAdLeftApplication
  • onRewarded
  • onVideoStarted
  • onVideoCompleted

Native Ads

Not implemented.
I am glad if someone will give me a pull request.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。