Flutter广告中介管理插件flutter_ads_mediation的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter广告中介管理插件flutter_ads_mediation的使用

执行所有广告中介设置并提供集成广告所需的所有代码。


它做了什么?

  • ✅ 更新AndroidManifest.xml文件(用于发布、调试和配置)
  • ✅ 更新build.gradle文件
  • ✅ 更新Info.plist文件
  • ✅ 更新Podfile文件
  • ✅ 更新main.dart文件
  • ✅ 创建lib/ad_unit_ids/ad_unit_id.dart文件

如何使用

只需在你的Flutter项目中运行以下命令:

flutter pub run flutter_ads_mediation:main <path/to/setup.json>

前提条件

最小Kotlin版本要求为 1.4.32(如果应用使用了Kotlin)

转到android/build.gradle文件,在buildscript块中将ext.kotlin_version替换为1.4.32。

buildscript {
    ext.kotlin_version = '1.4.32'
}

multiDexEnabled为true且minSdkVersion为19

转到android/app/build.gradle文件,在defaultConfig块中添加/替换这两行。

android {
    defaultConfig {   
        minSdkVersion 19   
        multiDexEnabled true
    }
}

完整示例代码

以下是使用flutter_ads_mediation插件的一个完整示例代码。

main.dart

import 'package:example/ad_unit_ids/ad_unit_id.dart';
import 'package:flutter_ads_mediation/ads_providers/banner_ads_provider.dart';
import 'package:flutter_ads_mediation/ads_providers/interstitial_ads_provider.dart';
import 'package:flutter_ads_mediation/ads_providers/rewarded_ads_provider.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化SDK,这一步是在请求广告之前必须做的。
  // 你可以通过回调检查每个适配器的初始化状态。
  MobileAds.instance.initialize().then((initializationStatus) {
    initializationStatus.adapterStatuses.forEach((key, value) {
      debugPrint('Adapter status for $key: ${value.description}');
    });
  });
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 这个小部件是你的应用程序的根。它是有状态的,意味着它有一个状态对象(定义在下面),包含影响其外观的字段。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 广告中介示例应用',
      theme: ThemeData(
        // 这是你的应用的主题。
        //
        // 尝试用"flutter run"运行你的应用。你会看到应用有一个蓝色工具栏。然后,不退出应用,尝试将primarySwatch改为Colors.green并调用"热重载"(在你运行"flutter run"的控制台中按"r",或者简单地保存更改以在Flutter IDE中进行"热重载")。注意计数器并没有重置回零;应用并没有重启。
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter 广告中介示例'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  // 这个小部件是你的应用的主页。它是有状态的,意味着它有一个状态对象(定义在下面),包含影响其外观的字段。
  // 这个类是状态的配置。它保存了由父组件(在这个例子中是App小部件)提供的值(在这个例子中是标题),并在构建方法中使用。在Widget子类中声明的字段总是标记为"final"。

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 定义插屏广告
  late InterstitialAdsProvider interstitial;

  // 定义激励视频广告
  late RewardedAdsProvider rewarded;

  // 定义横幅广告
  late BannerAdsProvider banner;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 创建并加载插屏广告
    interstitial = InterstitialAdsProvider(interstitialAdId: AdUnitId.interstitial);

    // 创建并加载激励视频广告
    rewarded = RewardedAdsProvider(rewardedAdId: AdUnitId.rewarded);

    // 创建并加载横幅广告
    banner = BannerAdsProvider(bannerAdId: AdUnitId.banner);
  }

  // 显示插屏广告的方法
  void showInterstitialAd() {
    if (interstitial.available) {
      interstitial.show();
    }
  }

  // 显示激励视频广告的方法
  void showRewardedAd() {
    if (rewarded.available) {
      rewarded.show();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: 12,
        itemBuilder: (context, index) {
          String item = (index++).toString();
          if (index == 6) {
            return SizedBox(
              height: banner.ad?.size.height.toDouble(),
              width: banner.ad?.size.width.toDouble(),
              child: AdWidget(
                ad: banner.ad!,
              ),
            );
          }
          return ListTile(
            leading: CircleAvatar(child: Text(item)),
            title: Text('列表项 $item'),
          );
        },
      ),
      floatingActionButton: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            onPressed: () {
              showInterstitialAd();
            },
            child: const Text('显示插屏广告'),
          ),
          const SizedBox(width: 10),
          ElevatedButton(
            onPressed: () {
              showRewardedAd();
            },
            child: const Text('显示激励视频广告'),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter广告中介管理插件flutter_ads_mediation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter广告中介管理插件flutter_ads_mediation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成广告中介管理插件flutter_ads_mediation可以帮助你更有效地管理多个广告网络,从而提高广告填充率和收益。以下是一个基本的代码案例,展示如何在Flutter项目中使用flutter_ads_mediation插件。

步骤 1: 添加依赖

首先,你需要在pubspec.yaml文件中添加flutter_ads_mediation依赖。确保你使用的是最新版本的插件。

dependencies:
  flutter:
    sdk: flutter
  flutter_ads_mediation: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 配置Android项目

android/app/src/main/AndroidManifest.xml中,添加必要的广告网络权限和配置。不同的广告网络有不同的配置要求,请参考各个广告网络的官方文档。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 添加广告网络所需的权限和配置 -->
    <!-- 例如,对于AdMob,你可能需要以下配置 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx"/>

    <!-- 其他广告网络的配置 -->

</manifest>

步骤 3: 初始化广告中介

在你的Flutter应用的入口文件(通常是main.dart)中,初始化广告中介插件。

import 'package:flutter/material.dart';
import 'package:flutter_ads_mediation/flutter_ads_mediation.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告中介
  AdsMediation.initialize(
    adNetworks: [
      AdNetworkConfig(
        networkId: 'network1_id', // 替换为实际的网络ID
        adapterClass: 'com.example.adapter.Network1Adapter', // 替换为实际的适配器类名
        // 其他配置参数
      ),
      AdNetworkConfig(
        networkId: 'network2_id', // 替换为实际的网络ID
        adapterClass: 'com.example.adapter.Network2Adapter', // 替换为实际的适配器类名
        // 其他配置参数
      ),
      // 添加更多广告网络配置
    ],
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Mediation Demo'),
      ),
      body: Center(
        child: Text('Hello, Flutter Ads Mediation!'),
      ),
    );
  }
}

步骤 4: 显示广告

在你的应用中显示广告。例如,显示一个横幅广告:

import 'package:flutter/material.dart';
import 'package:flutter_ads_mediation/flutter_ads_mediation.dart';

class AdBanner extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 50, // 根据广告网络的要求调整高度
      width: double.infinity,
      child: AdsMediationBanner(
        adUnitId: 'your_ad_unit_id', // 替换为你的广告单元ID
        listener: (AdEvent event, Map<String, dynamic> data) {
          if (event == AdEvent.loaded) {
            print('Ad loaded successfully.');
          } else if (event == AdEvent.failedToLoad) {
            print('Failed to load ad: ${data['error']}');
          }
          // 处理其他事件
        },
      ),
    );
  }
}

在你的MyHomePage中使用AdBanner组件:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Mediation Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AdBanner(), // 添加横幅广告
            Text('Hello, Flutter Ads Mediation!'),
          ],
        ),
      ),
    );
  }
}

注意

  1. flutter_ads_mediation插件的具体API和使用方式可能会随着版本更新而变化,请参考插件的官方文档和示例代码。
  2. 不同的广告网络可能有不同的初始化参数和配置要求,请确保按照各个广告网络的官方文档进行配置。
  3. 广告中介管理涉及多个广告网络的集成,调试和测试可能会比较复杂,建议使用真机进行测试,并关注各个广告网络的控制台和日志输出。

这个代码案例提供了一个基本的框架,你可以根据实际需求进行扩展和修改。

回到顶部