Flutter广告盈利插件knt_ad_monetized的使用
Flutter广告盈利插件knt_ad_monetized的使用
knt_ad_monetized
帮助处理常见的广告流。
开始使用
本项目是一个 Dart 包,可以轻松地在多个 Flutter 或 Dart 项目之间共享库模块。以下是开始使用的基本步骤。
初始化
首先,确保在您的 pubspec.yaml
文件中添加 knt_ad_monetized
依赖:
dependencies:
knt_ad_monetized: ^1.0.0
然后运行 flutter pub get
来安装依赖。
示例代码
以下是一个完整的示例代码,演示如何在 Flutter 应用中使用 knt_ad_monetized
插件来展示不同的广告类型。
main.dart
import 'package:example/ad_manager.dart';
import 'package:example/page/book_page.dart';
import 'package:flutter/material.dart';
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
import 'package:knt_bloc/knt_bloc.dart';
import 'flavors.dart';
import 'page/student_page.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Flavors.init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Knt Ad Monetized Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Knt Ad Monetized Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
AppOpenAdBloc? _appOpenAdBloc;
InterstitialAdBloc? _interstitialAdBloc;
BannerAdBloc? _bannerAdBloc;
NativeAdBloc? _nativeAdBloc;
bool _blocLoaded = false;
[@override](/user/override)
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
_init();
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: couldShowView
? MultiBlocProvider(
providers: [
BlocProvider(
create: (_) => _appOpenAdBloc!,
),
BlocProvider(
create: (_) => _interstitialAdBloc!,
),
BlocProvider(
create: (_) => _bannerAdBloc!,
),
BlocProvider(
create: (_) => _nativeAdBloc!,
),
],
child: const _ContentPage(),
)
: const CircularProgressIndicator(
color: Colors.orange,
),
),
);
}
void _init() async {
_blocLoaded = false;
_appOpenAdBloc = await appOpenAdBloc;
_interstitialAdBloc = await interstitialAdBloc;
_bannerAdBloc = await bannerAdBloc;
_nativeAdBloc = await nativeAdBloc;
setState(() {
_blocLoaded = true;
});
_appOpenAdBloc!.add(PrepareAdWithoutViewEvent());
_interstitialAdBloc!.add(PrepareAdWithoutViewEvent());
}
bool get couldShowView =>
_blocLoaded &&
_appOpenAdBloc != null &&
_interstitialAdBloc != null &&
_bannerAdBloc != null &&
_nativeAdBloc != null;
}
class _ContentPage extends StatelessWidget {
const _ContentPage({Key? key}) : super(key: key);
final _adTag = 'MyHomePage';
[@override](/user/override)
Widget build(BuildContext context) {
return MultiBlocListener(
listeners: [
BlocListener<AppOpenAdBloc, BaseState>(
listener: (context, state) {
if (state is ClosedAdWithoutViewState) {
context.showInSnackBar('AppOpenAd closed!');
}
},
),
BlocListener<InterstitialAdBloc, BaseState>(
listener: (context, state) {
if (state is ClosedAdWithoutViewState) {
context.showInSnackBar('InterstitialAd closed!');
}
},
),
],
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
context.loadAppOpenAd(_adTag);
},
child: const Text('显示应用打开广告'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
context.loadInterstitialAd(_adTag);
},
child: const Text('显示插屏广告'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return const BookPage();
},
),
);
},
child: const Text('显示书籍列表中的原生广告'),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return const StudentPage();
},
),
);
},
child: const Text('显示学生列表中的原生广告'),
),
const SizedBox(height: 16),
const KntBannerAd(
tag: 'banner_ad_home',
),
const SizedBox(height: 16),
KntNativeAd(
tag: 'native_ad_home_small',
nativeTemplateStyle: NativeTemplateStyle(
templateType: TemplateType.small,
),
),
const SizedBox(height: 16),
KntNativeAd(
tag: 'native_ad_home',
nativeTemplateStyle: NativeTemplateStyle(
// 必须选择一个模板。
templateType: TemplateType.medium,
// 可选:自定义广告样式。
cornerRadius: 10.0,
callToActionTextStyle: NativeTemplateTextStyle(
textColor: Colors.white,
backgroundColor: Colors.green,
style: NativeTemplateFontStyle.monospace,
size: 16.0),
primaryTextStyle: NativeTemplateTextStyle(
textColor: Colors.red,
backgroundColor: Colors.cyan,
style: NativeTemplateFontStyle.italic,
size: 16.0),
secondaryTextStyle: NativeTemplateTextStyle(
textColor: Colors.green,
backgroundColor: Colors.transparent,
style: NativeTemplateFontStyle.bold,
size: 16.0),
tertiaryTextStyle: NativeTemplateTextStyle(
textColor: Colors.brown,
backgroundColor: Colors.amber,
style: NativeTemplateFontStyle.normal,
size: 16.0),
),
),
],
),
),
);
}
}
extension on BuildContext {
void showInSnackBar(String message) {
ScaffoldMessenger.of(this).removeCurrentSnackBar();
ScaffoldMessenger.of(this).showSnackBar(SnackBar(
duration: const Duration(milliseconds: 3000),
content: Text(message),
));
}
}
更多关于Flutter广告盈利插件knt_ad_monetized的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告盈利插件knt_ad_monetized的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
knt_ad_monetized
是一个用于 Flutter 应用的广告盈利插件,它可以帮助开发者在应用中集成广告并实现盈利。以下是如何使用 knt_ad_monetized
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 knt_ad_monetized
插件的依赖:
dependencies:
flutter:
sdk: flutter
knt_ad_monetized: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的应用的 main.dart
文件中,初始化 knt_ad_monetized
插件。通常你需要在 main()
函数中进行初始化:
import 'package:flutter/material.dart';
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await KntAdMonetized.initialize(
appId: 'your_app_id', // 替换为你的应用ID
adUnitId: 'your_ad_unit_id', // 替换为你的广告单元ID
);
runApp(MyApp());
}
3. 显示广告
你可以在应用的任何地方使用 knt_ad_monetized
插件来显示广告。以下是一个简单的例子,展示如何在页面中显示横幅广告:
import 'package:flutter/material.dart';
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Ad Monetization'),
),
body: Column(
children: [
Expanded(
child: Center(
child: Text('Hello, World!'),
),
),
// 显示横幅广告
BannerAdWidget(
adUnitId: 'your_banner_ad_unit_id', // 替换为你的横幅广告单元ID
size: AdSize.banner,
),
],
),
);
}
}
4. 处理广告事件
knt_ad_monetized
插件提供了回调函数来处理广告的加载、显示、点击等事件。你可以根据需要处理这些事件:
BannerAdWidget(
adUnitId: 'your_banner_ad_unit_id',
size: AdSize.banner,
onAdLoaded: (ad) {
print('Ad loaded');
},
onAdFailedToLoad: (error) {
print('Ad failed to load: $error');
},
onAdClicked: () {
print('Ad clicked');
},
onAdImpression: () {
print('Ad impression');
},
)
5. 其他广告类型
knt_ad_monetized
插件还支持其他类型的广告,如插页式广告、奖励视频广告等。你可以根据应用的需求选择适合的广告类型。
插页式广告
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
InterstitialAdWidget(
adUnitId: 'your_interstitial_ad_unit_id',
onAdLoaded: (ad) {
print('Interstitial ad loaded');
},
onAdFailedToLoad: (error) {
print('Interstitial ad failed to load: $error');
},
onAdClicked: () {
print('Interstitial ad clicked');
},
onAdImpression: () {
print('Interstitial ad impression');
},
)
奖励视频广告
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
RewardedAdWidget(
adUnitId: 'your_rewarded_ad_unit_id',
onAdLoaded: (ad) {
print('Rewarded ad loaded');
},
onAdFailedToLoad: (error) {
print('Rewarded ad failed to load: $error');
},
onAdClicked: () {
print('Rewarded ad clicked');
},
onAdImpression: () {
print('Rewarded ad impression');
},
onUserEarnedReward: (reward) {
print('User earned reward: ${reward.amount} ${reward.type}');
},
)