因为之前 flutter_universalad 开发时未思考到扩展性,前面在接入新的广告商时发现接入很麻烦,所以对插件进行重构,开发了 GTAds, 可能按需加载须要的广告,也能够通过简略的接入就实现自定义广告,开发者无需关注广告的展现,插件会依据配置主动抉择不同的广告商广告进行展现,临时不反对 bidding 模式。
广告的展现抉择通过传入的展现概率来抉择展现。
一、反对插件
- gtads(本体)
- gtads_csj(穿山甲广告反对)
- gtads_ylh(优量汇广告反对)
- gtads_sigmob(Sigmob 广告反对)
二、应用
1、pubspec.yaml
除 gtads 本体必须引入外,其余广告能够按需引入。如果想要的广告不反对,则能够通过通过扩大接口进行自定义广告接入。
// 广告根底库 必须引入
gtads: ^0.0.6
// 须要应用的广告按需引入, 以下可选
// 穿山甲广告
gtads_csj: ^0.0.5
// 优量汇广告
gtads_ylh: ^0.0.2
//Sigmob 广告
gtads_sigmob: ^0.0.1
2、引入
import 'package:gtads/gtads.dart';
3、增加广告
广告初始化前必须实现增加
GTAds.addProvider([GTAdsCsjProvider("csj","5098580","5098580")]);
GTAdsCsjProviderc 参数
alias: 广告别名,必须保障惟一,后续广告加载回调将返回这个别名 辨认是哪家的广告
androidId: andorid appId
iosId: ios appId
4、初始化
//isDebug 是否开启 debug 日志
await GTAds.init(isDebug: true);
//return [{csj: true}],增加的广告初始化后果
5、横幅广告
GTAdsBannerWidget(
// 须要的广告位数组
codes: [GTAdsCode(alias: "csj", probability: 5,androidId: "945410197",iosId: "945410197")],
// 宽
width: 300,
// 高
height: 400,
// 超时工夫 当广告失败后会顺次重试其余广告 直至所有广告均加载失败 设置超时工夫可提前勾销
timeout: 5,
// 回调
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()}");
},
)),
6、激励广告
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,
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");
}),
);
if (b) {print("激励广告开始申请");
}else{print("激励广告开始申请失败");
}
7、插屏广告
var b = await GTAds.insertAd(
// 须要的广告位组
codes: [GTAdsCode(alias: "csj", probability: 5,androidId: "946201351",iosId: "946201351")],
isFull: false,
width: 300,
height: 500,
// 超时工夫 当广告失败后会顺次重试其余广告 直至所有广告均加载失败 设置超时工夫可提前勾销
timeout: 5,
callBack: GTAdsCallBack(onShow: (code) {print("插屏广告显示 ${code.toJson()}");
},
onFail: (code, message) {print("插屏广告失败 ${code.toJson()} $message");
},
onClick: (code) {print("插屏广告点击 ${code.toJson()}");
},
onClose: (code) {print("插屏广告敞开 ${code.toJson()}");
},
));
8、开屏广告
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,
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);
},
),
),
9、信息流
GTAdsNativeWidget(
// 须要的广告位组
codes: [GTAdsCode(alias: "csj", probability: 5,androidId: "945417699",iosId: "945417699")],
width: 300,
height: 200,
// 超时工夫 当广告失败后会顺次重试其余广告 直至所有广告均加载失败 设置超时工夫可提前勾销
timeout: 5,
callBack: GTAdsCallBack(onShow: (code) {print("信息流显示 ${code.toJson()}");
},
onClick: (code) {print("信息流点击 ${code.toJson()}");
},
onFail: (code,message) {print("信息流谬误 ${code.toJson()} $message");
},
onClose: (code) {print("信息流敞开 ${code.toJson()}");
},
),
),
三、广告位 GTAdsCode 阐明
如果不想展现某个广告商的广告,则能够通过不传入该广告的 code 来显示
// 别名 须要与 GTAds.addProvider 传入的 Provider 别名保持一致 不然无奈加载对应广告
String alias = "";
// 以后广告位 androidid
String? androidId;
// 以后广告位 iosid
String? iosId;
// 以后广告位呈现的概率 必须大于 0, 如果小于 0 则不会加载该广告
int probability = 0;
四、广告扩大
通过继承实现 GTAdsProvider 类来实现自定义广告接入
class MYAdProvider extends GTAdsProvider{
MYAdProvider(
{required String alias,
String?androidId,
String?iosId})
: super(alias, androidId, iosId);
@override
Future<bool> initAd(bool isDebug) {
// TODO: 调用广告初始化,返回是否胜利
throw UnimplementedError();}
@override
Widget? bannerAd(GTAdsCode adCode, double width, double height, GTAdsCallBack? callBack) {
// TODO: 返回一个横幅广告 Widget,如果不反对则返回 null
throw UnimplementedError();}
@override
Future<bool> insertAd(GTAdsCode adCode, bool isFull, double? width, double? height, GTAdsCallBack? callBack) {
// TODO: 调用插屏广告办法,如果不反对则返回 null
throw UnimplementedError();}
@override
Widget? nativeAd(GTAdsCode adCode, double width, double height, GTAdsCallBack? callBack) {
// TODO: 返回一个信息流广告 Widget,如果不反对则返回 null
throw UnimplementedError();}
@override
Future<bool> rewardAd(GTAdsCode adCode, String rewardName, int rewardAmount, String userId, String customData, GTAdsCallBack? callBack) {
// TODO: 调用激励广告办法,如果不反对则返回 null
throw UnimplementedError();}
@override
Widget? splashAd(GTAdsCode adCode, double width, double height, GTAdsCallBack? callBack) {
// TODO: 返回一个开屏广告 Widget,如果不反对则返回 null
throw UnimplementedError();}
}
五、阐明
集体开发工夫无限目前仅显示了穿山甲、优量汇、Sigmob 的广告接入,后续有空会实现其余的广告。如果有小伙伴实现了其余的广告,欢送 pr、或者提供插件链接,如果没问题能够退出的插件反对列表中。