flutter_google_ad_manager

Flutter 插件,用于 Google Ad Manager(DoubleClick for Publishers)。

入门

ios

在 info.plist 中添加 io.flutter.embedded_views_preview

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

遵循此处找到的任何其他说明

Google Ad Manager 入门指南

Android

在 AndroidManifest.xml 中添加 com.google.android.gms.ads.AD_MANAGER_APP

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

遵循此处找到的任何其他说明

Google Ad Manager 入门指南

横幅广告

只需在你喜欢的地方编写 DFPBanner 小部件。

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');
  },
),

手动刷新广告

您可以在用户交互时手动刷新横幅广告,使用 onAdViewCreated 回调来保存 DFPBannerViewController 的实例,然后调用 reload() 方法来刷新广告。

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');
  },
),

关于 testDevices

如果将 isDevelop 设置为 true,将使用测试 adUnitId。
(如果设置为 false,则使用描述的 adUnitId。)
Google Ad Manger 需要为实际设备注册 testDevices

使用此插件,您可以创建以下类并将其设置为 DFPBanner 的 testDevices。

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(),
)

关于 adSize

DFPAdSize 可用。它的大小与 Android 的相同。

  • 横幅
  • 全横幅
  • 大横幅
  • 排行榜
  • 中型矩形
  • 智能横幅 (仅限纵向)

其他自定义尺寸也可使用。

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

关于 EventListener

以下事件监听器可用

  • onAdLoaded
  • onAdFailedToLoad
  • onAdOpened
  • onAdClosed
  • onAdLeftApplication

插页式广告

首先使用 load 加载它,然后在需要的时候调用 show 方法。

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();

关于 isDevelop

如果将 isDevelop 设置为 true,将使用测试 adUnitId。
(如果设置为 false,则使用描述的 adUnitId。)

关于 EventListener

以下事件监听器可用

  • onAdLoaded
  • onAdFailedToLoad
  • onAdOpened
  • onAdClosed
  • onAdLeftApplication

奖励广告

首先使用 load 加载它,然后在需要的时候调用 show 方法。

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();

resumedpaused 时分别调用它。
为此,请实现 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;
    }
  }
}

关于 isDevelop

如果将 isDevelop 设置为 true,将使用测试 adUnitId。
(如果设置为 false,则使用描述的 adUnitId。)

关于 EventListener

以下事件监听器可用

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

原生广告

未实现。
如果您能提供一个 pull request,我将非常感激。

GitHub

https://github.com/ko2ic/flutter_google_ad_manager