Flutter广告集成插件mint_admobkit的使用

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

Flutter广告集成插件mint_admobkit的使用

mint_admobkit 是一套用于集成 AdMob 广告的工具,适用于 MintMinter 应用。

License Flutter CI Pub Package publisher

功能包括:

  • AdBanner: 显示横幅广告。
  • SimpleAdBanner: 简单显示横幅广告。
  • AdIdProvider: 提供不同类型的广告ID。
  • AdType: 定义广告类型。
  • AttView: 在iOS上显示ATT请求。

使用

在Android上集成AdMob

  1. 更新AndroidManifest.xml

    • <application> 前添加权限:

      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
      
    • </application> 前添加元数据:

      <!-- 示例AdMob应用ID: ca-app-pub-3940256099942544~3347511713 -->
      <meta-data
          android:name="com.google.android.gms.ads.APPLICATION_ID"
          android:value="ca-app-pub-3940256099942544~3347511713"/>
      
      <!-- 延迟应用程序测量直到调用MobileAds.initialize()。参见https://developers.google.com/admob/flutter/eu-consent#delay_app_measurement_optional -->
      <meta-data
          android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
          android:value="true"/>
      
  2. 添加广告提供商

    import 'package:mintminter_mint/ad/ad.dart';
    
    sealed class ExampleAdType extends AdType {
      const ExampleAdType({required this.unitId});
    
      final String unitId;
    
      [@override](/user/override)
      List<Object?> get props => [
        unitId,
      ];
    }
    
    class ExampleTopBannerAndroid extends ExampleAdType {
      const ExampleTopBannerAndroid({
        required super.unitId,
      });
    
      [@override](/user/override)
      List<Object?> get props => [super.unitId];
    }
    
    class ExampleAdProvider extends AdIdProvider {
      ExampleAdProvider._internal();
    
      static ExampleAdProvider? _instance;
    
      /// 获取ExampleAdProvider实例
      factory ExampleAdProvider.getInstance() {
        _instance ??= ExampleAdProvider._internal();
    
        return _instance!;
      }
    
      /// 释放ExampleAdProvider实例
      static dispose() {
        _instance = null;
      }
    
      [@override](/user/override)
      String getAndroidAdUnitId(AdType adType) {
        if (adType is ExampleAdType) {
          return adType.unitId;
        } else {
          return '';
        }
      }
    
      [@override](/user/override)
      String getIOSAdUnitId(AdType adType) {
        return '';
      }
    }
    
  3. 在主程序中初始化广告提供商

    void main() {
      WidgetsFlutterBinding.ensureInitialized();
      ExampleAdProvider.getInstance().initializeMobileAdsOnMobile();
    
      runApp(const App());
    }
    
  4. 使用AdBanner

    AdBanner(
      padding: const EdgeInsets.symmetric(vertical: 50),
      type: const ExampleTopBannerAndroid(unitId: AdIdProvider.mockAdId), 
      adIdProvider: ExampleAdProvider.getInstance(),
    )
    

完整示例Demo

以下是一个完整的示例,展示了如何在Flutter应用中使用mint_admobkit

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mint_admobkit/mint_admobkit.dart';

import 'example_ad_provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  unawaited(ExampleAdProvider.getInstance().initializeMobileAdsOnMobile(
    requireEuConsent: !kIsWeb && Platform.isAndroid,
  ));

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Mint AdMobKit Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Mint AdMobKit Demo'),
      ),
      body: ListView(
        children: [
          AdBanner(
            padding: const EdgeInsets.symmetric(vertical: 50),
            type: const ExampleTopBannerAndroid(unitId: AdIdProvider.mockAdId),
            adIdProvider: ExampleAdProvider.getInstance(),
          ),
          if (kDebugMode) ...[
            InkWell(
              child: Container(
                color: Theme.of(context).colorScheme.primaryContainer,
                padding: const EdgeInsets.all(20),
                child: Text(
                  'Reset Consent Information',
                  style: TextStyle(
                    color: Theme.of(context).colorScheme.onPrimaryContainer,
                  ),
                ),
              ),
              onTap: () {
                ExampleAdProvider.getInstance().resetConsentInformation();
              },
            )
          ],
          const SizedBox(
            height: 20,
          ),
          Container(
            color: Theme.of(context).colorScheme.primaryContainer,
            padding: const EdgeInsets.all(20),
            child: Text(
              'Other content',
              style: TextStyle(
                color: Theme.of(context).colorScheme.onPrimaryContainer,
              ),
            ),
          )
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成并使用mint_admobkit插件来显示广告的示例代码。mint_admobkit是一个流行的Flutter插件,用于集成Google AdMob广告。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加mint_admobkit依赖:

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

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

2. 配置AdMob

在AdMob官网创建一个应用并获取你的app_id和广告单元ID(例如,横幅广告的banner_ad_unit_id和插屏广告的interstitial_ad_unit_id)。

3. 初始化AdMob

在你的Flutter应用的主入口(通常是main.dart)中初始化AdMob:

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

void main() {
  // 初始化AdMob
  AdMobKit.instance.init(appId: 'your_app_id');

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

4. 显示横幅广告

在你的HomeScreen或其他屏幕中显示横幅广告:

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  BannerAd? _bannerAd;

  @override
  void initState() {
    super.initState();

    // 创建横幅广告
    _bannerAd = BannerAd(
      adUnitId: 'your_banner_ad_unit_id',
      size: AdSize.banner,
      listener: (AdEvent event, Map<String, dynamic>? info) {
        if (event == AdEvent.loaded) {
          // 广告加载成功
        } else if (event == AdEvent.failedToLoad) {
          // 广告加载失败
        }
      },
    )..load();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AdMob Integration'),
      ),
      body: Column(
        children: [
          // 在底部显示横幅广告
          if (_bannerAd != null)
            Container(
              height: _bannerAd!.size.height.toDouble(),
              child: AdWidget(ad: _bannerAd!),
            ),
          // 其他内容
          Expanded(
            child: Center(
              child: Text('Scroll down to see the banner ad.'),
            ),
          ),
        ],
      ),
    );
  }

  @override
  void dispose() {
    _bannerAd?.dispose();
    super.dispose();
  }
}

5. 显示插屏广告

在你的应用中某个位置(例如按钮点击时)显示插屏广告:

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  InterstitialAd? _interstitialAd;

  @override
  void initState() {
    super.initState();

    // 创建插屏广告
    _interstitialAd = InterstitialAd(
      adUnitId: 'your_interstitial_ad_unit_id',
      listener: (AdEvent event, Map<String, dynamic>? info) {
        if (event == AdEvent.loaded) {
          // 广告加载成功,可以在这里显示广告
        } else if (event == AdEvent.failedToLoad) {
          // 广告加载失败
        } else if (event == AdEvent.closed) {
          // 广告关闭,可以重新加载广告
          _interstitialAd?.load();
        }
      },
    )..load();
  }

  void _showInterstitialAd() {
    if (_interstitialAd!.isLoaded) {
      _interstitialAd!.show();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AdMob Integration'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showInterstitialAd,
          child: Text('Show Interstitial Ad'),
        ),
      ),
    );
  }

  @override
  void dispose() {
    _interstitialAd?.dispose();
    super.dispose();
  }
}

以上代码展示了如何在Flutter应用中使用mint_admobkit插件来集成和显示横幅广告和插屏广告。请确保将your_app_idyour_banner_ad_unit_idyour_interstitial_ad_unit_id替换为你从AdMob获取的实际值。

回到顶部