Flutter广告集成插件mi_ads的使用
Flutter广告集成插件mi_ads的使用
1. 配置
权限
在AndroidManifest.xml
文件中添加以下权限:
<manifest>
<!-- 必要 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 非必要 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
Provider
为了不影响下载类型的广告使用,无论应用处于哪个阶段,都需要在AndroidManifest.xml
文件中正常配置Provider。同时,为了不影响广告的转化和收入,请确保正确配置xxx.fileprovider
。
<provider android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider" android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
确保${applicationId}
与开发者包名一致,否则会导致崩溃。
添加HTTP支持
为了解决网络安全性问题,可以在res/xml/network_security_config.xml
文件中添加以下内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<debug-overrides>
<trust-anchors>
<!-- 仅在调试模式下信任用户添加的CA -->
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
然后在AndroidManifest.xml
文件中引用该配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config"></application>
</manifest>
注意事项
mimo_sdk_5.2.4
及以上版本支持armeabi-v7a
和arm64-v8a
。- 关闭SO文件的压缩:
android {
packagingOptions {
doNotStrip "*/*/libmimo_1011.so"
doNotStrip "*/*/libzeusLib.so"
}
}
ProGuard规则
为了防止混淆,可以添加以下ProGuard规则:
-keep class com.miui.zeus.** { *; }
2. 使用
初始化SDK
在应用启动时调用MiAds.initSDK()
进行初始化。
Future<void> initSDK();
检查是否初始化成功
可以通过调用isInitSuccess()
来检查SDK是否初始化成功。
Future<bool> isInitSuccess();
设置调试模式
可以通过调用setDebugOn()
来开启或关闭调试模式。
Future setDebugOn(bool enable);
设置个性化广告
可以通过调用setPersonalizedAd()
来设置是否开启个性化广告。
Future setPersonalizedAd(bool enable);
显示开屏广告
通过调用showSplashAd()
方法显示开屏广告,并传入广告位ID。
Future<void> showSplashAd({
required String codeId,
});
示例代码
以下是一个完整的示例代码,展示了如何使用mi_ads
插件集成广告。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:mi_ads/mi_ads.dart';
import 'package:mi_ads/mi_ads_callback.dart';
import 'package:mi_ads_example/banner_page.dart';
import 'package:mi_ads/encouragead/encourage_ad.dart';
import 'package:mi_ads/screenad/screen_ad.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息异步处理,因此我们在此处进行初始化
Future<void> initPlatformState() async {
// 如果小部件从树中移除,则丢弃回复而不是调用setState更新非存在的外观
if (!mounted) return;
MiAds.initSDK(); // 初始化SDK
MiAds.setDebugOn(true); // 开启调试模式
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
EncourageAd? encourageAd;
ScreenVideoAd? screenVideoAd;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Column(
children: [
_buildButton('开屏', () {
MiAds.showSplashAd(
codeId: '95416cd90dad32599051e91abfb5d031',
videoCallback: VideoCallback(onAdLoadFailed: (code, msg) {
print('======> onAdLoadFailed: code = $code msg = $msg');
}));
// _toNext(context,
// SplashAdPage(codeId: '22aa1b45d3522ce35d53537eaf17873c'));
}),
_buildButton('半屏插屏加载', () {
// 插屏广告
screenVideoAd = ScreenVideoAd(
videoCallback: VideoCallback(),
downloadCallback: DownloadCallback(),
);
screenVideoAd?.loadAd('ac4985f2820b8291d2080ed76c4cf300');
}),
_buildButton('全屏插屏加载', () {
// 插屏广告
screenVideoAd = ScreenVideoAd(
videoCallback: VideoCallback(),
downloadCallback: DownloadCallback(),
);
screenVideoAd?.loadAd('6488b333dd55596ef3f7ac5993ff1dfe');
}),
_buildButton('全屏插屏显示', () {
screenVideoAd?.showAd();
}),
_buildButton('激励视频加载', () {
encourageAd = EncourageAd(
videoCallback: VideoCallback(
onAdRequestSuccess: (){
print('mainEncourage = onAdRequestSuccess');
},
onAdLoadSuccess: (data) {
print('mainEncourage = $data');
},
onAdClosed: (){
print('mainEncourage = onAdClosed');
},
onAdShow: (){
print('mainEncourage = onAdShow');
},
onVideoStart: (){
print('mainEncourage = onVideoStart');
},
onReward: (){
print('mainEncourage = onReward');
},
onVideoSkip: (){
print('mainEncourage = onVideoSkip');
},
onVideoComplete: (){
print('mainEncourage = onVideoComplete');
},
onPicAdEnd: (){
print('mainEncourage = onPicAdEnd');
},
onAdClick: (){
print('mainEncourage = onAdClick');
},
),
downloadCallback: DownloadCallback());
encourageAd?.loadAd(
'785ae1952c1ff94c3492c7a1777284df',
);
}),
_buildButton('激励视频显示', () {
encourageAd?.showAd();
}),
_buildButton('Banner广告', () {
_toNext(context, BannerPage());
}),
_buildButton('原生模版Drawfeed大', () {
_toNext(
context,
DrawFeedPage(
codeId: '515c8de0d6c4bfeca5a64c3e16a2d769',
));
}),
_buildButton('原生模版Drawfeed', () {
_toNext(
context,
DrawFeedPage(
codeId: 'ff82e3140677ef737b53bc686bf3fcaa',
));
}),
_buildButton('原生自渲染广告Native', () {
_toNext(context, NativeAdPage('ff82e3140677ef737b53bc686bf3fcaa'));
}),
],
),
);
}
Widget _buildButton(String label, onTap) {
return InkWell(
onTap: onTap,
child: Container(
height: 44,
margin: const EdgeInsets.only(left: 16, right: 16, top: 12),
decoration: const BoxDecoration(
color: Colors.deepOrange,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Center(
child: Text(
label,
style: const TextStyle(color: Colors.white, fontSize: 14),
),
),
),
);
}
void _toNext(BuildContext context, Widget widget) {
Navigator.push(context, MaterialPageRoute(builder: (ctx) {
return widget;
}));
}
}
更多关于Flutter广告集成插件mi_ads的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告集成插件mi_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
mi_ads
是一个 Flutter 插件,用于在 Flutter 应用中集成小米广告 SDK。通过这个插件,开发者可以方便地在 Flutter 应用中展示小米的广告,如横幅广告、插屏广告、激励视频广告等。
以下是如何使用 mi_ads
插件的详细步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 mi_ads
插件的依赖:
dependencies:
flutter:
sdk: flutter
mi_ads: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化小米广告 SDK
在使用 mi_ads
之前,需要先初始化小米广告 SDK。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:mi_ads/mi_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化小米广告 SDK
await MiAds.init(appId: 'YOUR_APP_ID');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Mi Ads Example',
home: MyHomePage(),
);
}
}
3. 展示横幅广告
要在应用中展示横幅广告,可以使用 MiBannerAd
组件:
import 'package:flutter/material.dart';
import 'package:mi_ads/mi_ads.dart';
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Mi Ads Example'),
),
body: Column(
children: [
Expanded(
child: Center(
child: Text('Hello, World!'),
),
),
MiBannerAd(
adUnitId: 'YOUR_BANNER_AD_UNIT_ID',
adSize: AdSize.BANNER,
listener: (AdEvent event) {
print('Banner Ad Event: $event');
},
),
],
),
);
}
}
4. 展示插屏广告
要展示插屏广告,可以使用 MiInterstitialAd
:
import 'package:flutter/material.dart';
import 'package:mi_ads/mi_ads.dart';
class MyHomePage extends StatelessWidget {
final MiInterstitialAd interstitialAd = MiInterstitialAd(
adUnitId: 'YOUR_INTERSTITIAL_AD_UNIT_ID',
listener: (AdEvent event) {
print('Interstitial Ad Event: $event');
},
);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Mi Ads Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await interstitialAd.load();
await interstitialAd.show();
},
child: Text('Show Interstitial Ad'),
),
),
);
}
}
5. 展示激励视频广告
要展示激励视频广告,可以使用 MiRewardedVideoAd
:
import 'package:flutter/material.dart';
import 'package:mi_ads/mi_ads.dart';
class MyHomePage extends StatelessWidget {
final MiRewardedVideoAd rewardedVideoAd = MiRewardedVideoAd(
adUnitId: 'YOUR_REWARDED_VIDEO_AD_UNIT_ID',
listener: (AdEvent event) {
print('Rewarded Video Ad Event: $event');
},
);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Mi Ads Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await rewardedVideoAd.load();
await rewardedVideoAd.show();
},
child: Text('Show Rewarded Video Ad'),
),
),
);
}
}