Flutter广告集成插件yf_ads的使用
Flutter广告集成插件yf_ads的使用
这是一个用于Flutter应用的广告集成插件项目。通过此插件,你可以在你的Flutter应用中集成各种类型的广告,包括插屏广告、开屏广告、激励视频广告等。
开始使用
获取开始
本项目是一个用于Flutter的插件包,它包含适用于Android和/或iOS平台的特定实现代码。
如果你是Flutter开发新手,可以查看官方文档,该文档提供了教程、示例、移动开发指导以及完整的API引用。
更新Flutter
- 在终端中设置代理(例如使用Clash终端代理):
export https_proxy=http://127.0.0.1:7890 export http_proxy=http://127.0.0.1:7890 export all_proxy=socks5://127.0.0.1:7890
- 发布到Flutter仓库:
flutter pub publish --server=https://pub.dartlang.org
完整示例代码
以下是完整的示例代码,展示了如何在Flutter应用中集成和使用yf_ads
插件。
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_android_bean.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_ios_bean.dart';
import 'package:yf_ads/bean/yf_ads_interaction_bean.dart';
import 'package:yf_ads/bean/yf_ads_reward_video_bean.dart';
import 'package:yf_ads/bean/yf_ads_splash_bean.dart';
import 'package:yf_ads/callbacks/yf_ads_callback.dart';
import 'package:yf_ads/callbacks/yf_ads_reward_video_callback.dart';
import 'package:yf_ads/managers/yf_interstitial.dart';
import 'package:yf_ads/managers/yf_rewarded.dart';
import 'package:yf_ads/managers/yf_splash.dart';
import 'package:yf_ads/yf_ads.dart';
import 'yf_ads_request_banner_list_view.dart';
import 'yf_ads_request_banner_view.dart';
import 'yf_ads_request_express_feed_list_view.dart';
import 'yf_ads_request_express_feed_view.dart';
import 'yf_ads_request_native_draw_feed_video_view.dart';
import 'yf_ads_request_stream_view.dart';
import 'yf_ads_reward_video_extra_bean.dart';
void main() {
runApp(const MaterialApp(
debugShowCheckedModeBanner: false,
home: MyApp(),
));
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
var reaperFlutterPlugin;
int _currentIndex = 0;
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
reaperFlutterPlugin = YFAds.instance;
initReaperSdk();
loadSplashAd(true);
}
[@override](/user/override)
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed) {
print("切换到了前台");
} else if (state == AppLifecycleState.paused) {
print("切换到了后台");
}
}
[@override](/user/override)
void dispose() {
print("dispose");
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
Future<void> initReaperSdk() async {
var reaperInitSdkBaseBean;
if (Platform.isAndroid) {
const RELEASE_APP_ID = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
const RELEASE_APP_KEY = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
reaperInitSdkBaseBean = const YFAdsInitSDKAndroidBean(
appId: RELEASE_APP_ID,
appKey: RELEASE_APP_KEY,
ext1: "ccc",
ext2: "ddd",
enableLog: true,
envTest: true);
} else if (Platform.isIOS) {
const RELEASE_APP_ID = "b23c5c5c7ebd4dff9cf51ee9ee15aa77";
const RELEASE_APP_KEY = "b23c5c5c7ebd4dff9cf51ee9ee15aa77";
reaperInitSdkBaseBean = const YFAdsInitSDKIOSBean(
ext1: "c1",
ext2: "c2",
ext3: "c3",
ext4: "c4",
ext5: "c5",
ext6: "c6",
ext7: "c7",
ext8: "c8",
enableLog: true,
enableLocation: false,
appId: RELEASE_APP_ID, appKey: RELEASE_APP_KEY);
}
await reaperFlutterPlugin.initAdsSDK(reaperInitSdkBaseBean);
}
Future<void> onlyLoadSplashAd() async {
loadSplashAd(false);
}
Future<void> loadSplashAd(var loadAndShow) async {
var positionId;
if (Platform.isAndroid) {
positionId = "da54a0c6-62b0-4756-a975-a1bd122b4d61";
} else if (Platform.isIOS) {
positionId = "5212de4238344338913289d4358f3e45";
}
var reaperSplashBean = YFAdsSplashBean(
tag: "Splash",
positionId: positionId,
loadAndShow: loadAndShow,
callBack: splashAdCallBack);
await YFSplashManager.loadSplashAd(reaperSplashBean);
}
Future<void> showSplashAd() async {
await YFSplashManager.showSplashAd();
}
Future<void> loadInsertAd() async {
var positionId;
if (Platform.isAndroid) {
positionId = "503e92d8-2e2a-472c-b045-0f0f0282830c";
} else if (Platform.isIOS) {
positionId = "ae1caa917bbf483aad9127b613668cac";
}
var reaperInsertBean = YFAdsInteractionBean(tag: "custom",
positionId: positionId, loadAndShow: false, callBack: insertAdCallBack);
await YFInterstitialManager.loadInterstitialAd(reaperInsertBean);
}
Future<void> showInsertAd() async {
await YFInterstitialManager.showInterstitialAd();
}
void insertAdCallBack(YFAdsCallBack data) {
print("insertAdCallBack:${data.method} ${data.tag}");
if (defaultTargetPlatform == TargetPlatform.android &&
data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
}
}
void splashAdCallBack(YFAdsCallBack data) {
print("splashAdCallBack:${data.method} ${data.tag}");
if (defaultTargetPlatform == TargetPlatform.android &&
data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
}
}
Future<void> loadRewardVideoAd() async {
var reaperRewardVideoBean;
var positionId;
if (Platform.isAndroid) {
positionId = "e46b3594-f3db-4f8d-b602-ec429bb37fd2";
} else if (Platform.isIOS) {
positionId = "c1d463494c01418e8a31e36398f37a82";
}
///object will send to your server to verify reward
///adCode means position id which will be replaced with real position id in reaper sdk,and should be fixed with %%POS_ID%%
///adSrc means ad source which will be replaced with real ad source in reaper sdk,and should be fixed with %%AD_SRC%%
///other parameters can be defined dynamic by yourself.
var reaperRewardVideoExtraBean = const YFAdsRewardVideoExtraBean(
uid: "1156642",
rewardVideoType: 2,
taskId: "70",
taskAction: "rewardVideo4energy",
version: "3.42.0_debug",
adCode: "%%POS_ID%%",
adSrc: "%%AD_SRC%%",
orientation: 1);
var extra = jsonEncode(reaperRewardVideoExtraBean);
reaperRewardVideoBean = YFAdsRewardVideoBean(
positionId: positionId,
loadAndShow: false,
extra: extra,
callBack: rewardVideoAdCallBack);
await YFRewardManager.loadRewardAd(reaperRewardVideoBean);
}
Future<void> showRewardVideoAd() async {
await YFRewardManager.showRewardAd();
}
void rewardVideoAdCallBack(YFAdsRewardVideoCallBack data) {
print("rewardVideoAdCallBack: ${data.method!}");
if (data.method == YFAdsRewardVideoCallBack.YF_ADS_ON_REWARD_VERIFY) {
print("rewardVideoAdCallBack "
"rewardName is ${data.rewardName},"
"rewardVerify is ${data.rewardVerify}");
}
if (defaultTargetPlatform == TargetPlatform.android &&
data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
}
}
void showBannerView(BuildContext context) {
print("banner view button clicked");
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => YFAdsBannerViewDemo()),
);
}
void showBannerListView(BuildContext context) {
print("banner list view button clicked");
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => YFAdsBannerListViewDemo()),
);
}
void showExpressFeedView(BuildContext context) {
print("express feed view button clicked");
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => YFAdsExpressFeedViewDemo()),
);
}
void showExpressFeedListView(BuildContext context) {
print("express feed list view button clicked");
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => ExpressFeedListViewDemo()),
);
}
void showNativeDrawFeedVideoView(BuildContext context) {
print("native draw feed video view button clicked");
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => YFAdsNativeDrawFeedVideoViewDemo()),
);
}
void showStreamView(BuildContext context) {
print("stream view button clicked");
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => YFAdsStreamViewDemo()),
);
}
Future<void> getPermission(BuildContext context) async {
var status = await Permission.notification.status;
print(status);
if (status == PermissionStatus.denied) {
await Permission.notification.request().then((PermissionStatus permissionStatus) {
// 处理用户的选择
if (permissionStatus.isDenied) {
openAppSettings();
}
});
} else if (status == PermissionStatus.permanentlyDenied) {
openAppSettings();
} else if (status == PermissionStatus.granted) {
Fluttertoast.showToast(msg: "权限获取成功", toastLength: Toast.LENGTH_SHORT);
}
}
[@override](/user/override)
Widget build(BuildContext context) {
Widget getAdSource() {
return Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ElevatedButton(
onPressed: loadInsertAd,
child: const Text("加载插屏广告"),
),
ElevatedButton(
onPressed: showInsertAd,
child: const Text("展示插屏广告"),
),
ElevatedButton(
onPressed: onlyLoadSplashAd,
child: const Text("加载开屏广告"),
),
ElevatedButton(
onPressed: showSplashAd,
child: const Text("展示开屏广告"),
),
ElevatedButton(
onPressed: loadRewardVideoAd,
child: const Text("加载激励视频广告"),
),
ElevatedButton(
onPressed: showRewardVideoAd,
child: const Text("展示激励视频广告"),
),
ElevatedButton(
onPressed: () {
showBannerView(context);
},
child: const Text("展示Banner广告"),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
showBannerListView(context);
},
child: const Text("展示Banner列表广告"),
),
ElevatedButton(
onPressed: () {
showExpressFeedView(context);
},
child: const Text("展示信息流广告"),
),
ElevatedButton(
onPressed: () {
showExpressFeedListView(context);
},
child: const Text("展示信息流列表广告"),
),
ElevatedButton(
onPressed: () {
showNativeDrawFeedVideoView(context);
},
child: const Text("展示Draw视频广告"),
),
ElevatedButton(
onPressed: () {
showStreamView(context);
},
child: const Text("贴片广告"),
),
ElevatedButton(
onPressed: () {
getPermission(context);
},
child: const Text("获取通知栏权限"),
)
]),
],
),
));
}
return MaterialApp(
home: Scaffold(
body: Center(
child: getAdSource(),
),
bottomNavigationBar: BottomNavigationBar(
fixedColor: Colors.red,//选中的颜色
iconSize: 35,//设置item的大小
type: BottomNavigationBarType.fixed,//如果底部有4个或者4个以上,就必须设置该属性
currentIndex: _currentIndex,//当前选中的是第几个菜单
onTap: (v) {
setState(() {
_currentIndex = v;
});
},
items: const [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "首页"),
BottomNavigationBarItem(icon: Icon(Icons.category), label: "分类"),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: "设置"),
]),
));
}
}
更多关于Flutter广告集成插件yf_ads的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告集成插件yf_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
yf_ads
是一个用于 Flutter 应用中集成广告的插件,支持多种广告类型,如开屏广告、横幅广告、插屏广告、激励视频广告等。以下是如何使用 yf_ads
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 yf_ads
插件的依赖:
dependencies:
flutter:
sdk: flutter
yf_ads: ^1.0.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化广告 SDK
在应用的启动阶段,通常是在 main.dart
文件中,初始化广告 SDK。你需要提供广告平台的 App ID 或其他必要配置。
import 'package:flutter/material.dart';
import 'package:yf_ads/yf_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化广告 SDK
await YFAds.init(
appId: 'your_app_id', // 替换为你的广告平台 App ID
debug: true, // 是否开启调试模式
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
3. 加载并显示广告
根据你需要展示的广告类型,使用相应的 API 来加载和显示广告。
开屏广告
import 'package:flutter/material.dart';
import 'package:yf_ads/yf_ads.dart';
class SplashAdPage extends StatefulWidget {
[@override](/user/override)
_SplashAdPageState createState() => _SplashAdPageState();
}
class _SplashAdPageState extends State<SplashAdPage> {
[@override](/user/override)
void initState() {
super.initState();
loadSplashAd();
}
void loadSplashAd() {
YFAds.showSplashAd(
adUnitId: 'your_splash_ad_unit_id', // 替换为你的开屏广告单元 ID
listener: YFSplashAdListener(
onAdLoaded: () {
print('开屏广告加载成功');
},
onAdClosed: () {
print('开屏广告关闭');
// 广告关闭后跳转到主页面
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => MyHomePage(),
));
},
onAdError: (error) {
print('开屏广告加载失败: $error');
},
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('正在加载开屏广告...'),
),
);
}
}
横幅广告
import 'package:flutter/material.dart';
import 'package:yf_ads/yf_ads.dart';
class BannerAdPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('横幅广告示例'),
),
body: Column(
children: [
Expanded(
child: Center(
child: Text('这里是应用内容'),
),
),
YFBannerAd(
adUnitId: 'your_banner_ad_unit_id', // 替换为你的横幅广告单元 ID
size: YFBannerAdSize.BANNER,
listener: YFBannerAdListener(
onAdLoaded: () {
print('横幅广告加载成功');
},
onAdFailedToLoad: (error) {
print('横幅广告加载失败: $error');
},
),
),
],
),
);
}
}
插屏广告
import 'package:flutter/material.dart';
import 'package:yf_ads/yf_ads.dart';
class InterstitialAdPage extends StatelessWidget {
void loadInterstitialAd() {
YFAds.loadInterstitialAd(
adUnitId: 'your_interstitial_ad_unit_id', // 替换为你的插屏广告单元 ID
listener: YFInterstitialAdListener(
onAdLoaded: () {
print('插屏广告加载成功');
YFAds.showInterstitialAd();
},
onAdFailedToLoad: (error) {
print('插屏广告加载失败: $error');
},
onAdClosed: () {
print('插屏广告关闭');
},
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('插屏广告示例'),
),
body: Center(
child: ElevatedButton(
onPressed: loadInterstitialAd,
child: Text('加载并显示插屏广告'),
),
),
);
}
}
激励视频广告
import 'package:flutter/material.dart';
import 'package:yf_ads/yf_ads.dart';
class RewardedAdPage extends StatelessWidget {
void loadRewardedAd() {
YFAds.loadRewardedAd(
adUnitId: 'your_rewarded_ad_unit_id', // 替换为你的激励视频广告单元 ID
listener: YFRewardedAdListener(
onAdLoaded: () {
print('激励视频广告加载成功');
YFAds.showRewardedAd();
},
onAdFailedToLoad: (error) {
print('激励视频广告加载失败: $error');
},
onAdClosed: () {
print('激励视频广告关闭');
},
onReward: (reward) {
print('用户获得奖励: $reward');
},
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('激励视频广告示例'),
),
body: Center(
child: ElevatedButton(
onPressed: loadRewardedAd,
child: Text('加载并显示激励视频广告'),
),
),
);
}
}
4. 处理生命周期
在 State
类中,确保在适当的时机释放广告资源,以避免内存泄漏。
[@override](/user/override)
void dispose() {
YFAds.dispose(); // 释放广告资源
super.dispose();
}