Flutter移动广告集成插件flutter_yandex_mobile_ads的使用
Flutter移动广告集成插件flutter_yandex_mobile_ads的使用
本插件支持
Android:
- ✅ 插屏广告
- ✅ 激励视频广告
- ✅ 横幅广告
iOS:
- ✅ 插屏广告
- ✅ 激励视频广告
- ✅ 横幅广告
安装
要将Yandex移动广告插件集成到基于Flutter的移动应用中,请在项目的pubspec.yaml
文件中添加以下依赖:
dependencies:
...
flutter_yandex_mobile_ads: ^0.0.12
重要提示(仅适用于iOS):
此插件版本0.0.9使用了YandexMobileAds版本5.4.0,该版本需要Swift 5.7才能正确构建。
使用
初始化
首先,初始化插件:
Yandex.initialize();
插屏广告
加载
创建一个监听器来处理插屏广告的加载事件:
listener(YandexAdEvent event, dynamic args) {
if (event == YandexAdEvent.adReady) {
interstitialLoaded = true;
} else if (event == YandexAdEvent.adLoadFailed) {
debugPrint("Failed to load Interstitial Ad");
}
}
Yandex.interstititalListener = listener;
Yandex.loadInterstitial("R-M-DEMO-interstitial");
替换R-M-DEMO-interstitial
为你的广告位密钥。
显示
当广告加载完成后,可以调用showInterstitial
方法来显示插屏广告:
Yandex.showInterstitial();
激励视频广告
加载和显示
创建一个监听器来处理激励视频广告的加载事件:
var listener = (YandexAdEvent event, dynamic args) {
if (event == YandexAdEvent.adReady) {
Yandex.showRewardedVideo();
} else if (event == YandexAdEvent.adLoadFailed) {
debugPrint("Failed to load Rewarded Video");
} else if (event == YandexAdEvent.adRewarded) {
debugPrint("Successfully rewarded");
}
};
Yandex.rewardedListener = listener;
Yandex.loadRewarded("R-M-DEMO-rewarded-client-side-rtb");
替换R-M-DEMO-rewarded-client-side-rtb
为你的广告位密钥。
横幅广告
横幅广告可以通过两种方式设置大小:
YandexBanner(
adUnitId: "R-M-DEMO-300x250",
size: YandexBannerSize.stickySize(MediaQuery.of(context).size.width.toInt()),
)
或者
YandexBanner(
adUnitId: "R-M-DEMO-300x250",
size: YandexBannerSize.flexibleSize(320, 320),
)
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用flutter_yandex_mobile_ads
插件。
import 'package:flutter/material.dart';
import 'package:flutter_yandex_mobile_ads/banner.dart';
import 'package:flutter_yandex_mobile_ads/yandex.dart';
import 'package:flutter_yandex_mobile_ads_example/flex_banner_page.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String status = "尝试加载广告";
bool interstitialLoaded = false;
bool rewardedLoaded = false;
[@override](/user/override)
void initState() {
super.initState();
init();
}
void init() async {
await Yandex.initialize();
setState(() {});
}
void loadInterstitial() {
setState(() {
status = "正在加载插屏广告";
});
listener(YandexAdEvent event, dynamic args) {
debugPrint("插屏广告: Yandex事件: $event");
if (event == YandexAdEvent.adReady) {
setState(() {
interstitialLoaded = true;
status = "插屏广告加载成功";
});
} else if (event == YandexAdEvent.adLoadFailed) {
setState(() {
status = "插屏广告加载失败: ${args['errorMessage']}";
});
}
}
Yandex.interstititalListener = listener;
Yandex.loadInterstitial("R-M-DEMO-interstitial");
}
void showInterstitial() {
if (interstitialLoaded) {
setState(() {
status = "正在显示插屏广告";
interstitialLoaded = false;
Yandex.showInterstitial();
});
}
}
void loadRewardedVideo() {
setState(() {
status = "正在加载激励视频广告";
});
var listener = (YandexAdEvent event, dynamic args) {
if (event == YandexAdEvent.adReady) {
setState(() {
rewardedLoaded = true;
status = "激励视频广告加载成功";
});
} else if (event == YandexAdEvent.adLoadFailed) {
setState(() {
status = "激励视频广告加载失败: ${args['errorMessage']}";
});
} else if (event == YandexAdEvent.adRewarded) {
setState(() {
status = "奖励已发放";
});
}
};
Yandex.rewardedListener = listener;
Yandex.loadRewarded("R-M-DEMO-rewarded-client-side-rtb");
}
void showRewardedVideo() {
if (rewardedLoaded) {
setState(() {
status = "正在显示激励视频广告";
rewardedLoaded = false;
Yandex.showRewardedVideo();
});
}
}
void openFlexBannerPage() {
debugPrint("打开横幅页面");
Navigator.of(context).push(MaterialPageRoute<void>(
builder: (BuildContext context) {
return FlexBannerPage(); // ... to here.
},
));
}
[@override](/user/override)
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('Flutter Yandex Mobile Ads'),
),
body: Container(
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextButton(
onPressed: loadInterstitial,
child: Text("加载插屏广告")),
TextButton(
onPressed: showInterstitial,
child: Text("显示插屏广告")),
TextButton(
onPressed: loadRewardedVideo,
child: Text("加载激励视频广告")),
TextButton(
onPressed: showRewardedVideo,
child: Text("显示激励视频广告")),
TextButton(
onPressed: openFlexBannerPage,
child: Text("打开横幅页面")),
Expanded(
child: Container(
alignment: Alignment.center, child: Text(status))),
Container(height: 2, color: Colors.green,),
YandexBanner(
adUnitId: "R-M-DEMO-300x250",
size: YandexBannerSize.stickySize(width.toInt()),
listener: (event, arguments) {
switch(event) {
case YandexAdEvent.adReady:
setState(() {
status = "横幅广告加载成功";
});
break;
case YandexAdEvent.adLoadFailed:
setState(() {
status = "横幅广告加载失败: ${arguments['errorMessage']}";
});
break;
case YandexAdEvent.adClicked:
setState(() {
status = "横幅广告被点击";
});
break;
}
},
),
Container(height: 2, color: Colors.green,)
],
),
),
);
}
}
class CustomButton extends StatelessWidget {
final String label;
final Function onPressed;
const CustomButton({Key key, this.label, this.onPressed}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(vertical: 10.0),
child: MaterialButton(
minWidth: 250.0,
height: 50.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40.0),
side: BorderSide(width: 2.0, color: Colors.blue)),
child: Text(
label.toUpperCase(),
style: TextStyle(),
),
onPressed: onPressed,
),
);
}
}
更多关于Flutter移动广告集成插件flutter_yandex_mobile_ads的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复