因为之前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 = "";//以后广告位 androididString? androidId;//以后广告位 iosidString? 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、或者提供插件链接,如果没问题能够退出的插件反对列表中。