Flutter广告集成插件quakerbirdad的使用

Flutter广告集成插件quakerbirdad的使用

Flutter信天翁广告插件

quakerbirdad

官方文档

版本更新

更新日志

本地开发环境

[✓] Flutter (Channel stable, 3.13.9, on macOS 14.1 23B74 darwin-x64, locale
    zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 15.0.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] Android Studio (version 2022.3)
[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.4)
[✓] VS Code (version 1.83.1)
[✓] Connected device (3 available)
[✓] Network resources

集成步骤

1. pubspec.yaml

quakerbirdad: ^0.0.8 
// quakerbirdad:
//     git:
//       url: https://github.com/gstory0404/quakerbirdad.git
//       ref: 0.0.7

引入

import 'package:quakerbirdad/quakerbirdad.dart';

2. Android

根据官方文件进行权限等配置。

3. IOS

根据官方文件进行权限等配置。

注意事项

  • 广告view传入的宽高仅加载时起效,加载完成后动态修改成SDK返回广告大小

使用

SDK初始化

QuakerBirdAd.register(
      //android  app id
      androidAppId: "881",
      //ios app id
      iosAppId: "881",
      //是否显示日志,建议正式上线时,设置为false
      debug: true,
      //是否非WiFi下提示确认
      download: QuakerBirdAdDownload.ALWAYS,
      //应用渠道id (非必填,填写后可以按渠道查看广告数据)
      channelId: "test",
      //设置是否初始化时就申请权限
      permission: true,
    );

获取SDK版本

await QuakerBirdAd.getSDKVersion();

获取权限

目前仅iOS生效,用于ATT权限获取

QuakerBirdAd.requestPermission().then((value) => {
   print("获取权限结果 $value")
});

开屏广告

QuakerBirdAdSplash(
      androidId: "3561",
      iosId: "3561",
      width: window.physicalSize.width / window.devicePixelRatio,
      height: window.physicalSize.height / window.devicePixelRatio,
      callBack: QuakerBirdAdSplashCallBack(
        onShow: () {
          print("开屏广告显示");
        },
        onError: (msg) {
          print("开屏广告失败 $msg");
        },
        onClick: () {
          print("开屏广告点击");
        },
        onDismiss: () {
          print("开屏广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("开屏广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
      ),
    );

横幅广告

QuakerBirdAdBanner(
              androidId: "1983",
              iosId: "1983", 
              width: 500,
              height: 50,
              callBack: QuakerBirdAdBannerCallBack(
                  onShow: (){
                    print("横幅广告显示");
                  },
                  onError: (msg){
                    print("横幅广告失败 $msg");
                  },
                  onClick: (){
                    print("横幅广告点击");
                  },
                  onDismiss: (){
                    print("横幅广告关闭");
                    Navigator.pop(context);
                  },
                  onStatus: (type,platform,status,msg){
                    print("横幅广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
                  }
              ),
            );

信息流广告

QuakerBirdAdNative(
              androidId: "2351",
              iosId: "2351",
              width: 500,
              height: 200,
              callBack: QuakerBirdAdNativeCallBack(
                  onShow: (){
                    print("信息流广告显示");
                  },
                  onError: (msg){
                    print("信息流广告失败 $msg");
                  },
                  onClick: (){
                    print("信息流广告点击");
                  },
                  onDismiss: (){
                    print("信息流广告关闭");
                    Navigator.pop(context);
                  },
                  onStatus: (type,platform,status,msg){
                    print("信息流广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
                  }
              ),
            ),

模版广告

QuakerBirdAdExpress(
              androidId: "8461",
              iosId: "8461",
              width: 500,
              height: 300,
              callBack: QuakerBirdAdExpressCallBack(
                  onShow: (){
                    print("模版广告显示");
                  },
                  onError: (msg){
                    print("模版广告失败 $msg");
                  },
                  onClick: (){
                    print("模版广告点击");
                  },
                  onDismiss: (){
                    print("模版广告关闭");
                    Navigator.pop(context);
                  },
                  onStatus: (type,platform,status,msg){
                    print("模版广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
                  }
              ),
            ),

模版视频广告

QuakerBirdAdExpressDraw(
              androidId: "8517",
              iosId: "8517",
              width: 500,
              height: 300,
              callBack: QuakerBirdAdExpressDrawCallBack(
                  onShow: (){
                    print("模版视频广告显示");
                  },
                  onError: (msg){
                    print("模版视频广告失败 $msg");
                  },
                  onClick: (){
                    print("模版视频广告点击");
                  },
                  onDismiss: (){
                    print("模版视频广告关闭");
                    Navigator.pop(context);
                  },
                  onStatus: (type,platform,status,msg){
                    print("模版视频广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
                  }
              ),
            ),

插屏广告

请求广告

QuakerBirdAd.loadInteractionAd(androidId: "11087", iosId: "11087");

监听结果

FlutterUnionadStream.initAdStream(
    rewardCallBack: QuakerBirdAdRewardCallBack(
        onShow: () {
          print("激励广告显示");
        },
        onError: (msg) {
          print("激励广告失败 $msg");
        },
        onClick: () {
          print("激励广告点击");
        },
        onDismiss: () {
          print("激励广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("激励广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
        onReward: (type) {
          print("激励广告奖励 $type");
        },
    ),
);

全屏广告

请求广告

QuakerBirdAd.loadFullScreenAd(androidId: "8811", iosId: "8811");

监听结果

FlutterUnionadStream.initAdStream(
    fullScreenCallBack: QuakerBirdAdFullScreenCallBack(
        onShow: () {
          print("全屏广告显示");
        },
        onError: (msg) {
          print("全屏广告失败 $msg");
        },
        onClick: () {
          print("全屏广告点击");
        },
        onDismiss: () {
          print("全屏广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("全屏广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
    ),
);

激励广告

请求广告

QuakerBirdAd.loadRewardVideoAd(androidId: "1028", iosId: "1028");

监听结果

FlutterUnionadStream.initAdStream(
    rewardCallBack: QuakerBirdAdRewardCallBack(
        onShow: () {
          print("激励广告显示");
        },
        onError: (msg) {
          print("激励广告失败 $msg");
        },
        onClick: () {
          print("激励广告点击");
        },
        onDismiss: () {
          print("激励广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("激励广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
        onReward: (type) {
          print("激励广告奖励 $type");
        },
    ),
);

示例代码

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

import 'package:flutter/services.dart';
import 'package:quakerbirdad/quakerbirdad.dart';
import 'package:quakerbirdad_example/banner_page.dart';
import 'package:quakerbirdad_example/express_page.dart';
import 'package:quakerbirdad_example/splash_page.dart';

import 'express_draw_page.dart';
import 'native_page.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: IndexPage(),
    );
  }
}

class IndexPage extends StatefulWidget {
  const IndexPage({super.key});

  [@override](/user/override)
  _IndexPageState createState() => _IndexPageState();
}

class _IndexPageState extends State<IndexPage> {
  String? _version = "";
  StreamSubscription? _adViewStream;

  [@override](/user/override)
  void initState() {
    super.initState();
    _initRegister();
    _adViewStream = FlutterUnionadStream.initAdStream(
      interactionCallBack: QuakerBirdAdInteractionCallBack(
        onShow: () {
          print("插屏广告显示");
        },
        onError: (msg) {
          print("插屏广告失败 $msg");
        },
        onClick: () {
          print("插屏广告点击");
        },
        onDismiss: () {
          print("插屏广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("插屏广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
      ),
      fullScreenCallBack: QuakerBirdAdFullScreenCallBack(
        onShow: () {
          print("全屏广告显示");
        },
        onError: (msg) {
          print("全屏广告失败 $msg");
        },
        onClick: () {
          print("全屏广告点击");
        },
        onDismiss: () {
          print("全屏广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("全屏广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
      ),
      rewardCallBack: QuakerBirdAdRewardCallBack(
        onShow: () {
          print("激励广告显示");
        },
        onError: (msg) {
          print("激励广告失败 $msg");
        },
        onClick: () {
          print("激励广告点击");
        },
        onDismiss: () {
          print("激励广告关闭");
        },
        onStatus: (type, platform, status, msg) {
          print("激励广告状态 类型:$type  平台:$platform  状态:$status  错误消息 (失败时有效):$msg");
        },
        onReward: (type) {
          print("激励广告奖励 $type");
        },
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();
    FlutterUnionadStream.deleteAdStream(_adViewStream);
  }

  //注册
  void _initRegister() async {
    QuakerBirdAd.register(
      //android  app id
      androidAppId: "881",
      //ios app id
      iosAppId: "1330788821410791458-7",
      //是否显示日志,建议正式上线时,设置为false
      debug: true,
      //是否非WiFi下提示确认
      download: QuakerBirdAdDownload.ALWAYS,
      //应用渠道id (非必填,填写后可以按渠道查看广告数据)
      channelId: "test",
      //设置是否初始化时就申请权限
      permission: true,
    );
    QuakerBirdAd.getSDKVersion().then((value) {
      setState(() {
        _version = value;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter信天翁广告插件'),
      ),
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        reverse: false,
        physics: const BouncingScrollPhysics(),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Container(
              alignment: Alignment.center,
              height: 50,
              child: const Text("Flutter信天翁广告插件"),
            ),
            Container(
              alignment: Alignment.center,
              height: 50,
              child: Text("信天翁SDK版本号&gt;&gt;&gt;&gt;&gt;&gt; v$_version"),
            ),
            button("获取权限", () {
              QuakerBirdAd.requestPermission().then((value) => {
                print("获取权限结果 $value")
              });
            }),
            button("开屏广告", () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const SplashPage(),
                ),
              );
            }),
            button("插屏广告", () {
              QuakerBirdAd.loadInteractionAd(
                  androidId: "11087", iosId: "1473895494450167827");
            }),
            button("全屏广告", () {
              QuakerBirdAd.loadFullScreenAd(androidId: "8811", iosId: "1473895822729953353");
            }),
            button("横幅广告", () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const BannerPage(),
                ),
              );
            }),
            button("信息流广告", () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const NativePage(),
                ),
              );
            }),
            button("模版广告", () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const ExpressPage(),
                ),
              );
            }),
            button("模版视频广告", () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const ExpressDrawPage(),
                ),
              );
            }),
            button("激励广告", () {
              QuakerBirdAd.loadRewardVideoAd(androidId: "1028", iosId: "1330851356566634576");
            }),
          ],
        ),
      ),
    );
  }

  button(String title, VoidCallback call) {
    return MaterialButton(
      color: Colors.blue,
      textColor: Colors.white,
      child: Text(title),
      onPressed: call,
    );
  }
}

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

1 回复

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


quakerbirdad 是一个用于在 Flutter 应用中集成广告的插件。它支持多种广告格式,如横幅广告、插页广告、激励视频广告等。以下是如何在 Flutter 项目中使用 quakerbirdad 插件的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 quakerbirdad 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  quakerbirdad: ^1.0.0  # 请使用最新版本

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

2. 初始化广告 SDK

main.dart 或应用的入口文件中初始化广告 SDK。通常这是在 main() 函数中完成的。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告 SDK
  await Quakerbirdad.init(
    appId: 'YOUR_APP_ID',  // 替换为你的应用ID
    isDebug: true,         // 调试模式
  );
  
  runApp(MyApp());
}

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

3. 显示横幅广告

在需要显示横幅广告的地方,使用 BannerAdWidget

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('Hello, world!'),
            ),
          ),
          // 显示横幅广告
          BannerAdWidget(
            adUnitId: 'YOUR_BANNER_AD_UNIT_ID',  // 替换为你的横幅广告单元ID
            adSize: AdSize.banner,
          ),
        ],
      ),
    );
  }
}

4. 显示插页广告

插页广告通常在全屏显示,可以在应用的自然过渡点(如页面切换或完成某个操作)时显示。

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 加载插页广告
            bool isLoaded = await Quakerbirdad.loadInterstitialAd(
              adUnitId: 'YOUR_INTERSTITIAL_AD_UNIT_ID',  // 替换为你的插页广告单元ID
            );
            if (isLoaded) {
              // 显示插页广告
              Quakerbirdad.showInterstitialAd();
            }
          },
          child: Text('Show Interstitial Ad'),
        ),
      ),
    );
  }
}

5. 显示激励视频广告

激励视频广告通常用于奖励用户观看广告,比如在游戏中获得额外生命或金币。

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 显示激励视频广告
            bool isRewarded = await Quakerbirdad.showRewardedVideoAd(
              adUnitId: 'YOUR_REWARDED_AD_UNIT_ID',  // 替换为你的激励视频广告单元ID
            );
            if (isRewarded) {
              // 用户观看了完整的广告,给予奖励
              print('User rewarded!');
            }
          },
          child: Text('Show Rewarded Video Ad'),
        ),
      ),
    );
  }
}

6. 处理广告生命周期事件

你可以监听广告的生命周期事件,如广告加载成功、广告展示、广告点击、广告关闭等。

Quakerbirdad.setAdListener(
  onAdLoaded: (adType) {
    print('Ad loaded: $adType');
  },
  onAdFailedToLoad: (adType, errorCode, errorMessage) {
    print('Ad failed to load: $adType, $errorCode, $errorMessage');
  },
  onAdShowed: (adType) {
    print('Ad showed: $adType');
  },
  onAdClicked: (adType) {
    print('Ad clicked: $adType');
  },
  onAdClosed: (adType) {
    print('Ad closed: $adType');
  },
);

7. 其他注意事项

  • 测试广告单元ID:在开发阶段,建议使用测试广告单元ID,以避免产生无效的广告展示。
  • 广告频率控制:根据应用场景合理控制广告的显示频率,避免影响用户体验。
  • 广告合规性:确保广告的展示符合广告平台和应用商店的政策要求。

8. 发布应用

在发布应用之前,请确保将测试广告单元ID替换为正式的广告单元ID,并关闭调试模式。

await Quakerbirdad.init(
  appId: 'YOUR_APP_ID',
  isDebug: false,  // 关闭调试模式
);
回到顶部