Flutter广告插件gtads的使用
Flutter广告插件GTAds的使用
GTAds聚合广告插件
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
更多关于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'),
);
}
}
注意事项
- 测试设备ID:在开发过程中,你可以使用
AdRequest.Builder().addTestDevice('YOUR_TEST_DEVICE_ID')
来添加测试设备ID,以确保广告能正确显示而不会产生实际请求。 - 广告单元ID:确保你使用的是有效的广告单元ID,并且这些ID已经在你Google Ads的后台配置好。
- 权限:确保在Android和iOS项目中正确配置了必要的权限。
通过以上步骤,你应该能够在Flutter应用中成功集成并使用GT Ads插件来展示横幅广告。