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/>
遵循此处找到的任何其他说明
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>
遵循此处找到的任何其他说明
横幅广告
只需在你喜欢的地方编写 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();
在 resumed 和 paused 时分别调用它。
为此,请实现 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,我将非常感激。