Flutter广告集成插件bilmobileadsflutter的使用
Flutter广告集成插件bilmobileadsflutter的使用
bilmobileadsflutter
bilmobileadsflutter
是一个用于集成 ValueImpressionSDK
的 Flutter 插件。
开始使用
安装
在项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
bilmobileadsflutter: "LATEST_VERSION"
然后运行以下命令以安装包:
flutter pub get
iOS 特定设置
更新你的 Info.plist
文件:
<key>GADIsAdManagerApp</key>
<true/>
Android 特定设置
初始化插件
在尝试显示任何广告之前,需要先初始化插件。可以在应用的最早启动点(例如 main
或 initState
函数)进行初始化:
import 'package:bilmobileadsflutter/PBMobileAds.dart';
[@override](/user/override)
void initState() {
super.initState();
// 初始化 SDK: testMode = true 表示测试模式
PBMobileAds.initialize(testMode: false);
}
支持的平台
- iOS: >= 11.0
- Android: >= 19
支持的广告类型
- 横幅广告
- 插屏广告
- 奖励广告
完整示例代码
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:bilmobileadsflutter/bilmobileadsflutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const String _bannerID = "ff76160c-5978-4171-b7a7-5cadf8fc9712";
static const String _interstitialID = "cd228c7d-a17e-4546-bc3c-f3c4971d416e";
static const String _rewardedID = "3590bf71-0ec3-4f49-b4ae-0720e359d4a3";
late AdInterstitial adInterstitial;
late AdRewarded adRewarded;
late AdBanner _banner;
late BannerController _bannerController;
[@override](/user/override)
void initState() {
super.initState();
PBMobileAds.initialize(testMode: false);
_banner = AdBanner(
adUnitId: _bannerID,
listener: (BilAdEvents event, Map<String, dynamic> args) {
handleEvents(event, args, 'Banner');
},
onBannerCreated: (BannerController controller) {
_bannerController = controller;
},
);
}
void handleEvents(
BilAdEvents event, Map<String, dynamic> args, String adType) {
switch (event) {
case BilAdEvents.loaded:
print('*** $adType 广告已加载!');
showAlert('*** $adType 广告已加载!');
break;
case BilAdEvents.opened:
print('*** $adType 广告已打开!');
showAlert('*** $adType 广告已打开!');
break;
case BilAdEvents.closed:
// adInterstitial.preLoad();
print('*** $adType 广告已关闭!');
showAlert('*** $adType 广告已关闭!');
break;
case BilAdEvents.clicked:
print('*** $adType 广告已点击!');
break;
case BilAdEvents.leftApplication:
print('*** $adType 广告离开应用!');
break;
case BilAdEvents.failedToLoad:
print('*** $adType 广告加载失败 :(');
break;
case BilAdEvents.failedToShow:
print('*** $adType 广告展示失败 :(');
break;
case BilAdEvents.rewarded:
print(
'*** $adType 广告奖励: 类型 - ${args["type"]} | 币 - ${args["coin"]}');
break;
default:
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: ListView(
children: <Widget>[
createBTN(ElevatedButton(
onPressed: () {
PBMobileAds.initialize(testMode: false);
},
child: const Text("PBMobileAds - 初始化"))),
createBTN(ElevatedButton(
onPressed: () {
PBMobileAds.enableCOPPA();
},
child: const Text("PBMobileAds - 启用COPPA"))),
createBTN(ElevatedButton(
onPressed: () {
PBMobileAds.disableCOPPA();
},
child: const Text("PBMobileAds - 禁用COPPA"))),
createBTN(ElevatedButton(
onPressed: () {
PBMobileAds.setYearOfBirth(1991);
},
child: const Text("PBMobileAds - 设置出生年份"))),
createBTN(ElevatedButton(
onPressed: () {
PBMobileAds.setGender(BilGender.Male);
},
child: const Text("PBMobileAds - 设置性别"))),
const SizedBox(height: 10),
const Divider(color: Colors.black),
const SizedBox(height: 10),
Builder(
builder: (BuildContext context) {
final size = MediaQuery.of(context).size;
final height = max(size.height * .05, 50.0);
return Container(
width: size.width,
height: height,
color: Colors.amber,
child: _banner,
);
},
),
const SizedBox(height: 10),
const Divider(color: Colors.black),
const SizedBox(height: 10),
createBTN(ElevatedButton(
onPressed: () {
_bannerController.show();
},
child: const Text("横幅广告 - 显示"))),
createBTN(ElevatedButton(
onPressed: () {
_bannerController.hide();
},
child: const Text("横幅广告 - 隐藏"))),
createBTN(ElevatedButton(
onPressed: () async {
double w = await _bannerController.widthInPixels;
double h = await _bannerController.heightInPixels;
print("横幅广告尺寸: w-$w | h-$h");
},
child: const Text("横幅广告 - 获取尺寸")),
const SizedBox(height: 10),
const Divider(color: Colors.black),
const SizedBox(height: 10),
createBTN(ElevatedButton(
onPressed: () {
adInterstitial = AdInterstitial(
adUnitId: _interstitialID,
listener: (BilAdEvents event, Map<String, dynamic> args) {
handleEvents(event, args, '插屏广告');
},
);
},
child: const Text("插屏广告 - 创建"))),
createBTN(ElevatedButton(
onPressed: () {
adInterstitial.preLoad();
},
child: const Text("插屏广告 - 预加载"))),
createBTN(ElevatedButton(
onPressed: () {
adInterstitial.show();
},
child: const Text("插屏广告 - 显示"))),
createBTN(ElevatedButton(
onPressed: () {
adInterstitial.destroy();
},
child: const Text("插屏广告 - 销毁"))),
const SizedBox(height: 10),
const Divider(color: Colors.black),
const SizedBox(height: 10),
createBTN(ElevatedButton(
onPressed: () {
adRewarded = AdRewarded(
adUnitId: _rewardedID,
listener: (BilAdEvents event, Map<String, dynamic> args) {
handleEvents(event, args, '奖励广告');
},
);
},
child: const Text("奖励广告 - 创建"))),
createBTN(ElevatedButton(
onPressed: () {
adRewarded.preLoad();
},
child: const Text("奖励广告 - 预加载"))),
createBTN(ElevatedButton(
onPressed: () {
adRewarded.show();
},
child: const Text("奖励广告 - 显示"))),
createBTN(ElevatedButton(
onPressed: () {
adRewarded.destroy();
},
child: const Text("奖励广告 - 销毁"))),
const SizedBox(height: 10),
const Divider(color: Colors.black),
const SizedBox(height: 10),
],
),
),
);
}
// GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
showAlert(String alert) {
final snackBar = SnackBar(
duration: const Duration(seconds: 1),
content: Text(alert),
action: SnackBarAction(
label: '关闭',
onPressed: () {
// 一些代码来撤销更改。
},
),
);
// _scaffoldKey.currentState!.hidhideCurrentSnackBar();
// _scaffoldKey.currentState!.showSnackBar(snackBar);
ScaffoldMessenger.of(context).hideCurrentSnackBar();
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
Widget createBTN(Widget widget) {
// 按钮事件处理函数
return Container(
padding: const EdgeInsets.symmetric(
vertical: 5.0,
),
width: double.infinity,
child: widget,
// child: RaisedButton(
// onPressed: _onPress,
// elevation: 5.0,
// color: Colors.white,
// padding: EdgeInsets.all(15.0),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(30.0),
// ),
// child: Text(txtBTN),
// ),
);
}
}
更多关于Flutter广告集成插件bilmobileadsflutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告集成插件bilmobileadsflutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bilmobileadsflutter
是 flutter 的一个广告集成插件,主要用于在 Flutter 应用中集成移动广告。以下是如何使用 bilmobileadsflutter
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 bilmobileadsflutter
插件的依赖。
dependencies:
flutter:
sdk: flutter
bilmobileadsflutter: ^1.0.0 # 请根据实际情况填写版本号
然后运行 flutter pub get
来安装依赖。
2. 初始化 SDK
在使用广告之前,你需要初始化广告 SDK。通常在 main.dart
文件中进行初始化。
import 'package:bilmobileadsflutter/bilmobileadsflutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化广告SDK
await BilmobileAds.init('your_app_id'); // 替换为你的应用ID
runApp(MyApp());
}
3. 展示横幅广告
横幅广告通常显示在屏幕的顶部或底部。你可以使用 BannerAd
类来展示横幅广告。
import 'package:bilmobileadsflutter/bilmobileadsflutter.dart';
import 'package:flutter/material.dart';
class BannerAdExample extends StatefulWidget {
[@override](/user/override)
_BannerAdExampleState createState() => _BannerAdExampleState();
}
class _BannerAdExampleState extends State<BannerAdExample> {
BannerAd? _bannerAd;
[@override](/user/override)
void initState() {
super.initState();
_loadBannerAd();
}
void _loadBannerAd() {
_bannerAd = BannerAd(
adUnitId: 'your_banner_ad_unit_id', // 替换为你的横幅广告单元ID
size: AdSize.banner,
listener: BannerAdListener(
onAdLoaded: (ad) {
print('Banner Ad loaded.');
},
onAdFailedToLoad: (ad, error) {
print('Banner Ad failed to load: $error');
},
),
);
_bannerAd!.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:bilmobileadsflutter/bilmobileadsflutter.dart';
import 'package:flutter/material.dart';
class InterstitialAdExample extends StatefulWidget {
[@override](/user/override)
_InterstitialAdExampleState createState() => _InterstitialAdExampleState();
}
class _InterstitialAdExampleState extends State<InterstitialAdExample> {
InterstitialAd? _interstitialAd;
[@override](/user/override)
void initState() {
super.initState();
_loadInterstitialAd();
}
void _loadInterstitialAd() {
InterstitialAd.load(
adUnitId: 'your_interstitial_ad_unit_id', // 替换为你的插屏广告单元ID
request: AdRequest(),
adLoadCallback: InterstitialAdLoadCallback(
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 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:bilmobileadsflutter/bilmobileadsflutter.dart';
import 'package:flutter/material.dart';
class RewardedAdExample extends StatefulWidget {
[@override](/user/override)
_RewardedAdExampleState createState() => _RewardedAdExampleState();
}
class _RewardedAdExampleState extends State<RewardedAdExample> {
RewardedAd? _rewardedAd;
[@override](/user/override)
void initState() {
super.initState();
_loadRewardedAd();
}
void _loadRewardedAd() {
RewardedAd.load(
adUnitId: 'your_rewarded_ad_unit_id', // 替换为你的激励广告单元ID
request: AdRequest(),
rewardedAdLoadCallback: RewardedAdLoadCallback(
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: (AdWithoutView ad, RewardItem reward) {
print('User earned reward: ${reward.amount} ${reward.type}');
},
);
} else {
print('Rewarded Ad 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();
}
}