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 特定设置

初始化插件

在尝试显示任何广告之前,需要先初始化插件。可以在应用的最早启动点(例如 maininitState 函数)进行初始化:

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

1 回复

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