Flutter广告集成插件yy_ads的使用
Flutter广告集成插件yy_ads的使用
概述
yy_ads
是一个用于在 Flutter 应用中集成 Android 原生游易广告 SDK 的插件。通过该插件,您可以快速实现各种类型的广告展示,包括开屏广告、Banner 广告、插屏广告、全屏视频广告、激励视频广告、信息流广告等。
使用步骤
1. 获取应用和广告位
在使用 yy_ads
插件之前,您需要先申请应用以及广告位。请访问 游易官网 了解详细流程。
2. 添加依赖
在您的 pubspec.yaml
文件中添加 yy_ads
依赖:
dependencies:
yy_ads: ^版本号
然后运行以下命令以安装依赖:
flutter pub get
3. 初始化插件
确保在 main.dart
中正确初始化插件,并配置必要的参数。
4. 完整示例代码
以下是一个完整的示例代码,展示了如何使用 yy_ads
插件集成不同类型的广告。
示例代码:lib/main.dart
import 'dart:collection';
import 'dart:math';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:yy_ads/yy_ads.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Ad Test',
home: new HomePage(),
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
var height = MediaQuery.of(context).size.height;
final ButtonStyle style =
ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));
return new Scaffold(
appBar: new AppBar(
title: new Text('Ad Test'),
),
body: new Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SplashPage()),
);
},
child: const Text("加载开屏广告"),
style: style,
),
ElevatedButton(
onPressed: () {
LoadAd().loadBanner(width);
},
child: const Text("加载Banner广告"),
style: style,
),
ElevatedButton(
onPressed: () {
LoadAd().loadInterstitial();
},
child: const Text("加载插屏广告"),
style: style,
),
ElevatedButton(
onPressed: () {
LoadAd().loadFullscreenVideo();
},
child: const Text("加载全屏视频广告"),
style: style,
),
ElevatedButton(
onPressed: () {
LoadAd().loadReward();
},
child: const Text("加载激励视频广告"),
style: style,
),
ElevatedButton(
onPressed: () {
LoadAd().loadStream(width);
},
child: const Text("加载信息流广告"),
style: style,
),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => DrawStreamPage()),
);
},
child: const Text("加载Draw信息流广告"),
style: style,
),
Container(
width: width,
height: 150,
color: Colors.blue,
child: AndroidView(
viewType: YyAds.BANNER_VIEW,
),
),
Container(
width: width,
height: 150,
color: Colors.blue,
child: AndroidView(
viewType: YyAds.NATIVE_STREAM_VIEW,
),
),
],
),
),
);
}
}
// 加载开屏广告
class SplashPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
var height = MediaQuery.of(context).size.height;
LoadAd().loadSplash(context);
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: width,
height: height,
color: Colors.blue,
child: AndroidView(
viewType: YyAds.SPLASH_VIEW,
),
),
],
),
),
);
}
}
// 加载信息流广告
class DrawStreamPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
var height = MediaQuery.of(context).size.height;
LoadAd().loadDraw();
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: width,
height: height,
color: Colors.blue,
child: AndroidView(
viewType: YyAds.DRAW_STREAM_VIEW,
),
),
],
),
),
);
}
}
// 广告加载类
class LoadAd {
late BuildContext _mContext;
// 加载开屏广告
void loadSplash(BuildContext context) async {
Stream stream;
try {
stream = await YyAds.loadSplash(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setTimeout: 3500, // 设置超时时间
AdConfig.setSplashClickType: AdConfig.LIMIT_CLICK_AREA, // 点击区域限制
AdConfig.setInteractionType: AdConfig.SPLASH_SLIP, // 滑动交互类型
});
stream.listen(_onSplashData, onError: _onSplashError, onDone: _onDone);
_mContext = context;
} on PlatformException catch (s) {
print(s);
}
}
// 加载Banner广告
void loadBanner(double width) async {
Stream stream;
try {
stream = await YyAds.loadBanner(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.isCarousel: false, // 是否轮播
AdConfig.setWidth: width.toInt(), // Banner宽度
AdConfig.setHeight: width * 58 ~/ 375, // Banner高度
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 加载插屏广告
void loadInterstitial() async {
Stream stream;
try {
stream = await YyAds.loadInterstitial(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 加载全屏视频广告
void loadFullscreenVideo() async {
Stream stream;
try {
stream = await YyAds.loadFullscreen(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 加载激励视频广告
void loadReward() async {
Stream stream;
try {
stream = await YyAds.loadReward(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setUserId: "321345", // 用户ID
AdConfig.setCustomData: "xxxxx", // 自定义数据
AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
AdConfig.setScenes: RitScenes.CUSTOMIZE_SCENES.value, // 场景类型
AdConfig.setScenesMsg: "customize_scenes", // 场景描述
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 加载信息流广告
void loadStream(double width) async {
Stream stream;
try {
stream = await YyAds.loadNativeStream(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setWidth: width.toInt(), // 广告宽度
AdConfig.setHeight: 0, // 广告高度(0表示自动计算)
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 加载Draw信息流广告
void loadDraw() async {
Stream stream;
try {
stream = await YyAds.loadDrawStream(<String, dynamic>{
AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
AdConfig.setWidth: 500, // 广告宽度
AdConfig.setHeight: 0, // 广告高度(0表示自动计算)
});
stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
} on PlatformException catch (s) {
print(s);
}
}
// 开屏广告数据回调
void _onSplashData(message) {
print('正常接收,$message');
var event = message.toString();
if (event == "onAdCanceled" || event == "onError" || event == "onTimeOut") {
Navigator.pop(_mContext);
}
}
// 开屏广告错误回调
void _onSplashError(error) {
print('错误接收:$error');
Navigator.pop(_mContext);
}
// 广告数据正常回调
static void _onData(message) {
var verify = "";
if (message is HashMap<dynamic, dynamic>) {
verify = message["verify"];
print(verify);
}
print('正常接收:$message');
}
// 广告数据错误回调
static void _onErrorData(error) {
print('错误接收:$error');
}
// 数据传输完成回调
static void _onDone() {
print("消息传递完毕");
}
}
更多关于Flutter广告集成插件yy_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告集成插件yy_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
yy_ads
是一个用于在 Flutter 应用中集成广告的插件。它支持多种广告类型,如横幅广告、插页式广告、激励视频广告等。以下是使用 yy_ads
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 yy_ads
插件的依赖:
dependencies:
flutter:
sdk: flutter
yy_ads: ^latest_version
然后运行 flutter pub get
来安装依赖。
2. 初始化广告 SDK
在使用广告之前,需要初始化广告 SDK。通常,初始化代码可以放在 main.dart
文件的 main
函数中:
import 'package:yy_ads/yy_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化广告 SDK
await YYAds.initialize(
appId: 'your_app_id',
isDebug: true, // 调试模式,发布时设置为 false
);
runApp(MyApp());
}
3. 加载和显示横幅广告
横幅广告通常显示在屏幕的顶部或底部。以下是一个简单的例子:
import 'package:flutter/material.dart';
import 'package:yy_ads/yy_ads.dart';
class BannerAdExample extends StatefulWidget {
[@override](/user/override)
_BannerAdExampleState createState() => _BannerAdExampleState();
}
class _BannerAdExampleState extends State<BannerAdExample> {
YYBannerAd? _bannerAd;
[@override](/user/override)
void initState() {
super.initState();
_loadBannerAd();
}
void _loadBannerAd() {
_bannerAd = YYBannerAd(
adUnitId: 'your_banner_ad_unit_id',
size: YYAdSize.banner,
listener: YYAdListener(
onAdLoaded: (ad) {
print('Banner Ad loaded.');
},
onAdFailedToLoad: (ad, error) {
print('Banner Ad failed to load: $error');
},
),
)..load();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Banner Ad Example'),
),
body: Center(
child: _bannerAd != null
? AdWidget(ad: _bannerAd!)
: Text('Loading Banner Ad...'),
),
);
}
[@override](/user/override)
void dispose() {
_bannerAd?.dispose();
super.dispose();
}
}
4. 加载和显示插页式广告
插页式广告通常在应用的自然过渡点显示,例如在页面之间切换时:
import 'package:flutter/material.dart';
import 'package:yy_ads/yy_ads.dart';
class InterstitialAdExample extends StatefulWidget {
[@override](/user/override)
_InterstitialAdExampleState createState() => _InterstitialAdExampleState();
}
class _InterstitialAdExampleState extends State<InterstitialAdExample> {
YYInterstitialAd? _interstitialAd;
[@override](/user/override)
void initState() {
super.initState();
_loadInterstitialAd();
}
void _loadInterstitialAd() {
YYInterstitialAd.load(
adUnitId: 'your_interstitial_ad_unit_id',
request: YYAdRequest(),
adLoadCallback: YYInterstitialAdLoadCallback(
onAdLoaded: (ad) {
_interstitialAd = ad;
print('Interstitial Ad loaded.');
},
onAdFailedToLoad: (error) {
print('Interstitial Ad failed to load: $error');
},
),
);
}
void _showInterstitialAd() {
if (_interstitialAd != null) {
_interstitialAd!.show();
} else {
print('Interstitial Ad is not ready yet.');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Interstitial Ad Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _showInterstitialAd,
child: Text('Show Interstitial Ad'),
),
),
);
}
[@override](/user/override)
void dispose() {
_interstitialAd?.dispose();
super.dispose();
}
}
5. 加载和显示激励视频广告
激励视频广告通常用于奖励用户,例如在游戏中提供额外的生命或金币:
import 'package:flutter/material.dart';
import 'package:yy_ads/yy_ads.dart';
class RewardedAdExample extends StatefulWidget {
[@override](/user/override)
_RewardedAdExampleState createState() => _RewardedAdExampleState();
}
class _RewardedAdExampleState extends State<RewardedAdExample> {
YYRewardedAd? _rewardedAd;
[@override](/user/override)
void initState() {
super.initState();
_loadRewardedAd();
}
void _loadRewardedAd() {
YYRewardedAd.load(
adUnitId: 'your_rewarded_ad_unit_id',
request: YYAdRequest(),
adLoadCallback: YYRewardedAdLoadCallback(
onAdLoaded: (ad) {
_rewardedAd = ad;
print('Rewarded Ad loaded.');
},
onAdFailedToLoad: (error) {
print('Rewarded Ad failed to load: $error');
},
),
);
}
void _showRewardedAd() {
if (_rewardedAd != null) {
_rewardedAd!.show(
onUserEarnedReward: (ad, reward) {
print('User earned reward: ${reward.amount} ${reward.type}');
},
);
} else {
print('Rewarded Ad is not ready yet.');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Rewarded Ad Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _showRewardedAd,
child: Text('Show Rewarded Ad'),
),
),
);
}
[@override](/user/override)
void dispose() {
_rewardedAd?.dispose();
super.dispose();
}
}