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-v7aarm64-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

1 回复

更多关于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'),
        ),
      ),
    );
  }
}
回到顶部