Flutter广告插件gtads的使用

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

Flutter广告插件GTAds的使用

GTAds聚合广告插件

GTAds插件版本

GTAds插件喜欢数

GTAds插件评分

GTAds最后提交时间

GTAds星标数

Flutter交流群1

Flutter交流群2

Flutter反馈群

GTAds是一个Flutter聚合广告管理插件,支持Android和iOS平台,提供一套广告管理调度方案及广告规则。插件本身不提供任何广告,可以通过扩展方法快速集成市面上任何一款广告。

支持插件

  • gtads(基础库): 必须引入。
  • gtads_csj(字节穿山甲广告支持)
  • gtads_ylh(腾讯优量汇广告支持)
  • gtads_sigmob(Sigmob广告支持)
  • gtads_bqt(百度百青藤广告支持)
  • gtads_ks(快手广告支持)

开发环境

[✓] Flutter (Channel stable, 3.24.5, on macOS 14.6.1 23G93 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 16.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] Android Studio (version 2022.3)
[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.2)
[✓] VS Code (version 1.95.3)
[✓] Connected device (4 available)
[✓] Network resources

使用

引入插件

pubspec.yaml文件中添加以下依赖:

dependencies:
  // 广告基础库 必须引入
  gtads: ^1.4.0
  // 需要使用的广告按需引入,以下可选
  // 字节穿山甲广告
  gtads_csj: ^1.4.1
  // 腾讯优量汇广告
  gtads_ylh: ^1.4.1
  // Sigmob广告
  gtads_sigmob: ^1.4.1
  // 百度百青藤广告
  gtads_bqt: ^1.4.1
  // 快手广告
  gtads_ks: ^1.4.1

注意:基础库版本号与广告插件版本号前两位必须保持一致,否则会出现兼容问题。

引入包

import 'package:gtads/gtads.dart';

添加广告

广告初始化前必须完成添加对应广告Provider,如:穿山甲。

// 添加Provider
GTAds.addProvider(GTAdsCsjProvider("csj", "5098580", "5098580", appName: "unionad"));

// 添加Provider列表
GTAds.addProviders([GTAdsCsjProvider("csj", "5098580", "5098580", appName: "unionad")]);

// 移除Provider
GTAds.removeProvider("csj");

// 获取Provider
GTAds.getProvider("csj");

注释:

  • GTAdsCsjProvider: 穿山甲广告Provider。
  • alias: 广告别名,必须保证唯一,后续广告加载回调将返回这个别名以识别是哪家的广告。
  • androidId: Android应用ID。
  • iosId: iOS应用ID。

初始化

// 是否开启debug日志
await GTAds.init(isDebug: true);
// 返回[{csj: true}],添加的广告初始化结果

横幅广告

GTAdsBannerWidget(
  // 需要的广告位数组
  codes: [GTAdsCode(alias: "csj", probability: 5, androidId: "945410197", iosId: "945410197")],
  // 宽
  width: 300,
  // 高
  height: 400,
  // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
  timeout: 5,
  // 广告加载模式 [GTAdsModel.RANDOM]优先级模式 [GTAdsModel.RANDOM]随机模式
  // 默认随机模式
  model: GTAdsModel.RANDOM,
  // 回调
  callBack: GTAdsCallBack(
    onShow: (code) {
      print("Banner显示 ${code.toJson()}");
    },
    onClick: (code) {
      print("Banner点击 ${code.toJson()}");
    },
    onFail: (code, message) {
      print("Banner错误 ${code.toJson()} $message");
    },
    onClose: (code) {
      print("Banner关闭 ${code.toJson()}");
    },
    onTimeout: () {
      print("Banner加载超时");
    },
    onEnd: () {
      print("Banner所有广告位都加载失败");
    },
  ),
);

激励广告

var b = await GTAds.rewardAd(
  // 需要的广告位数组
  codes: [GTAdsCode(alias: "csj", probability: 5, androidId: "945418088", iosId: "945418088")],
  // 奖励名称
  rewardName: "100金币",
  // 奖励数量
  rewardAmount: 100,
  // 用户id
  userId: "user100",
  // 扩展参数
  customData: "123",
  // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
  timeout: 5,
  // 广告加载模式 [GTAdsModel.RANDOM]优先级模式 [GTAdsModel.RANDOM]随机模式
  // 默认随机模式
  model: GTAdsModel.RANDOM,
  callBack: GTAdsCallBack(
    onShow: (code) {
      print("激励广告显示 ${code.toJson()}");
    },
    onFail: (code, message) {
      print("激励广告失败 ${code.toJson()} $message");
    },
    onClick: (code) {
      print("激励广告点击 ${code.toJson()}");
    },
    onClose: (code) {
      print("激励广告关闭 ${code.toJson()}");
    },
    onVerify: (code, verify, transId, rewardName, rewardAmount) {
      print("激励广告奖励验证 ${code.toJson()} $verify $transId $rewardName $rewardAmount");
    },
    onExpand: (code, param) {
      print("激励广告自定义参数 ${code.toJson()} $param");
    },
    onTimeout: () {
      print("激励广告加载超时");
    },
    onEnd: () {
      print("激励广告所有广告位都加载失败");
    },
  ),
);

if (b) {
  print("激励广告开始请求");
} else {
  print("激励广告开始请求失败");
}

插屏广告

var b = await GTAds.insertAd(
  // 需要的广告位数组
  codes: [GTAdsCode(alias: "csj", probability: 5, androidId: "946201351", iosId: "946201351")],
  isFull: false,
  width: 300,
  height: 500,
  // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
  timeout: 5,
  // 广告加载模式 [GTAdsModel.PRIORITY]优先级模式 [GTAdsModel.RANDOM]随机模式
  // 默认随机模式
  model: GTAdsModel.RANDOM,
  callBack: GTAdsCallBack(
    onShow: (code) {
      print("插屏广告显示 ${code.toJson()}");
    },
    onFail: (code, message) {
      print("插屏广告失败 ${code.toJson()} $message");
    },
    onClick: (code) {
      print("插屏广告点击 ${code.toJson()}");
    },
    onClose: (code) {
      print("插屏广告关闭 ${code.toJson()}");
    },
    onTimeout: () {
      print("插屏广告加载超时");
    },
    onEnd: () {
      print("插屏广告所有广告位都加载失败");
    },
  ),
);

开屏广告

GTAdsSplashWidget(
  // 需要的广告位数组
  codes: [GTAdsCode(alias: "csj", probability: 5, androidId: "887367774", iosId: "887367774")],
  width: MediaQuery.of(context).size.width,
  height: MediaQuery.of(context).size.height,
  // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
  timeout: 5,
  // 广告加载模式 [GTAdsModel.PRIORITY]优先级模式 [GTAdsModel.RANDOM]随机模式
  // 默认随机模式
  model: GTAdsModel.RANDOM,
  callBack: GTAdsCallBack(
    onShow: (code) {
      print("开屏显示 ${code.toJson()}");
    },
    onClick: (code) {
      print("开屏点击 ${code.toJson()}");
    },
    onFail: (code, message) {
      print("开屏错误 ${code.toJson()} $message");
      Navigator.pop(context);
    },
    onClose: (code) {
      print("开屏关闭 ${code.toJson()}");
      Navigator.pop(context);
    },
    onTimeout: () {
      print("开屏加载超时");
      Navigator.pop(context);
    },
    onEnd: () {
      print("开屏所有广告位都加载失败");
      Navigator.pop(context);
    },
  ),
),

信息流广告

GTAdsNativeWidget(
  // 需要的广告位数组
  codes: [GTAdsCode(alias: "csj", probability: 5, androidId: "945417699", iosId: "945417699")],
  width: 300,
  height: 200,
  // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
  timeout: 5,
  // 广告加载模式 [GTAdsModel.PRIORITY]优先级模式 [GTAdsModel.RANDOM]随机模式
  // 默认随机模式
  model: GTAdsModel.RANDOM,
  callBack: GTAdsCallBack(
    onShow: (code) {
      print("信息流显示 ${code.toJson()}");
    },
    onClick: (code) {
      print("信息流点击 ${code.toJson()}");
    },
    onFail: (code, message) {
      print("信息流错误 ${code.toJson()} $message");
    },
    onClose: (code) {
      print("信息流关闭 ${code.toJson()}");
    },
    onTimeout: () {
      print("信息流加载超时");
    },
    onEnd: () {
      print("信息流所有广告位都加载失败");
    },
  ),
),

说明

广告位codes

如果不需要某个广告,则可以不传入对应的广告位id到数组中。

广告加载模式

  • GTAdsModel.PRIORITY: 优先级模式,传入广告位GTAdsCode中probability数值越大越优先加载,如果数值相同则列表中前面的先加载(当加载失败后从剩余广告中按数值大小依次重试)。
  • GTAdsModel.RANDOM: 随机模式,传入广告位GTAdsCode中probability数值必须大于0,如果小于0则不会加载该广告,数值越大出现的概率越高(当加载失败后从剩余广告中重新随机加载)。

GTAdsCallBack说明

GTAdsCallBack(
  {this.onShow,
  this.onFail,
  this.onClick,
  this.onFinish,
  this.onVerify,
  this.onClose,
  this.onTimeout,
  this.onEnd,
  this.onExpand});
  • onShow: 广告加载成功
  • onFail: 广告加载失败(单广告位)
  • onClick: 广告加载点击
  • onFinish: 广告加载完成
  • onVerify: 广告验证
  • onClose: 广告关闭
  • onTimeout: 广告加载超时
  • onEnd: 广告加载结束(所有广告均加载失败)
  • onExpand: 广告扩展回调

示例代码

import 'package:flutter/material.dart';
import 'package:gtads/gtads.dart';
import 'package:gtads_example/banner_page.dart';
import 'package:gtads_example/config.dart';
import 'package:gtads_example/native_page.dart';
import 'package:gtads_example/splash_page.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Index(),
    );
  }
}

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

class _IndexState extends State<Index> {
  List<Map<String, bool>> initAd = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    init();
  }

  Future<void> init() async {
    // 添加广告支持
    GTAds.addProviders(Config.providers);
    // 初始化广告
    initAd = await GTAds.init(isDebug: true);
    print("广告加载结果 $initAd");
    // loadInsertAd();
    setState(() {});
  }

  void loadInsertAd() async {
    print("开始加载广告");
    await GTAds.insertAd(
      codes: Config.insertCodes,
      isFull: false,
      // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
      timeout: 10,
      callBack: GTAdsCallBack(
        onShow: (code) {
          print("插屏广告显示 ${code.toJson()}");
        },
        onFail: (code, message) {
          print("插屏广告失败 ${code?.toJson()} $message");
        },
        onClick: (code) {
          print("插屏广告点击 ${code.toJson()}");
        },
        onClose: (code) {
          print("插屏广告关闭 ${code.toJson()}");
        },
        onTimeout: () {
          print("插屏广告加载超时");
        },
        onEnd: () {
          print("插屏广告所有广告位都加载失败");
        },
      ),
    );
  }

  void loadRewardAd() async {
    await GTAds.rewardAd(
      codes: Config.rewardCodes,
      // 奖励名称
      rewardName: "100金币",
      // 奖励数量
      rewardAmount: 100,
      // 用户id
      userId: "user100",
      // 扩展参数
      customData: "123",
      model: GTAdsModel.RANDOM,
      // 超时时间 当广告失败后会依次重试其他广告 直至所有广告均加载失败 设置超时时间可提前取消
      timeout: 6,
      callBack: GTAdsCallBack(
        onShow: (code) {
          print("激励广告显示 ${code.toJson()}");
        },
        onFail: (code, message) {
          print("激励广告失败 ${code?.toJson()} $message");
        },
        onClick: (code) {
          print("激励广告点击 ${code.toJson()}");
        },
        onClose: (code) {
          print("激励广告关闭 ${code.toJson()}");
        },
        onVerify: (code, verify, transId, rewardName, rewardAmount) {
          print(
              "激励广告奖励验证 ${code.toJson()} $verify $transId $rewardName $rewardAmount");
        },
        onExpand: (code, param) {
          print("激励广告自定义参数 ${code.toJson()} $param");
        },
        onTimeout: () {
          print("激励广告加载超时");
        },
        onEnd: () {
          print("激励广告所有广告位都加载失败");
        },
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('GTAds聚合广告插件'),
        ),
        body: Center(
          child: SingleChildScrollView(
            child: Column(
              children: [
                Text("初始化结果$initAd"),
                MaterialButton(
                  color: Colors.blue,
                  textColor: Colors.white,
                  child: const Text('横幅广告'),
                  onPressed: () async {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => const BannerPage(),
                      ),
                    );
                  },
                ),
                MaterialButton(
                  color: Colors.blue,
                  textColor: Colors.white,
                  child: const Text('激励广告'),
                  onPressed: () async {
                    loadRewardAd();
                  },
                ),
                MaterialButton(
                  color: Colors.blue,
                  textColor: Colors.white,
                  child: const Text('插屏广告'),
                  onPressed: () async {
                    print("广告位数量 ${Config.insertCodes.length}");
                    loadInsertAd();
                  },
                ),
                MaterialButton(
                  color: Colors.blue,
                  textColor: Colors.white,
                  child: const Text('开屏广告'),
                  onPressed: () async {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => const SplashPage(),
                      ),
                    );
                  },
                ),
                MaterialButton(
                  color: Colors.blue,
                  textColor: Colors.white,
                  child: const Text('信息流广告'),
                  onPressed: () async {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => const NativePage(),
                      ),
                    );
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成和使用GT Ads(谷歌广告)插件的示例代码。这个示例将展示如何配置插件并展示一个简单的横幅广告(Banner Ad)。

第一步:添加依赖

首先,你需要在pubspec.yaml文件中添加gt_ads插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  gt_ads: ^最新版本号  # 请替换为实际可用的最新版本号

第二步:配置Android项目

android/app/src/main/AndroidManifest.xml文件中,添加必要的权限和广告配置。

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

    <application
        ... >

        <!-- 添加广告权限 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx"/>

        <!-- 其他配置 -->
        ...
    </application>

    <!-- 必要的权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

</manifest>

ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx替换为你的实际广告单元ID。

第三步:配置iOS项目

在iOS项目中,你需要通过CocoaPods来配置GT Ads。打开ios/Podfile并添加以下配置:

platform :ios, '10.0'

target 'Runner' do
  use_frameworks!
  config = use_native_modules!

  # Flutter Pod
  flutter_install_all_ios_pods(File.dirname(File.realpath(__FILE__)))

  # Google Mobile Ads SDK
  pod 'Google-Mobile-Ads-SDK'
end

然后运行以下命令来安装Pods:

cd ios
pod install
cd ..

第四步:在Flutter代码中集成广告

创建一个新的Dart文件(例如ad_manager.dart)来管理广告逻辑:

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

class AdManager {
  late BannerAd bannerAd;

  AdManager() {
    // 初始化横幅广告
    bannerAd = BannerAd(
      adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx',  // 替换为你的广告单元ID
      size: AdSize.banner,
      request: AdRequest()
        ..addTestDevice('YOUR_TEST_DEVICE_ID')  // 替换为你的测试设备ID,用于开发阶段调试
        ..addKeyword('Flutter')
    )
      ..load()
      ..show(
        anchorOffset: 0.0,
        anchorType: AnchorType.bottom,
      );
  }

  void dispose() {
    bannerAd.dispose();
  }
}

在你的主页面(例如main.dart)中使用AdManager

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter GT Ads Example'),
        ),
        body: AdWrapper(),
      ),
    );
  }
}

class AdWrapper extends StatefulWidget {
  @override
  _AdWrapperState createState() => _AdWrapperState();
}

class _AdWrapperState extends State<AdWrapper> {
  late AdManager adManager;

  @override
  void initState() {
    super.initState();
    adManager = AdManager();
  }

  @override
  void dispose() {
    adManager.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('Flutter GT Ads Integration Example'),
    );
  }
}

注意事项

  1. 测试设备ID:在开发过程中,你可以使用AdRequest.Builder().addTestDevice('YOUR_TEST_DEVICE_ID')来添加测试设备ID,以确保广告能正确显示而不会产生实际请求。
  2. 广告单元ID:确保你使用的是有效的广告单元ID,并且这些ID已经在你Google Ads的后台配置好。
  3. 权限:确保在Android和iOS项目中正确配置了必要的权限。

通过以上步骤,你应该能够在Flutter应用中成功集成并使用GT Ads插件来展示横幅广告。

回到顶部