admin
2021-12-04 5b1540fa5c18bc8b2739f4ab06d2a7b7953c65bf
lib/utils/ad_util.dart
@@ -18,27 +18,98 @@
  static void showSplashAd(
      double width, double height, OnAdCallback adCallback) async {
    var csjAppId = await ConfigUtil.getConfig(ConfigKey.csjAppId);
    var gdtAppId = await ConfigUtil.getConfig(ConfigKey.gdtAppId);
    if (StringUtil.isNullOrEmpty(csjAppId) &&
        StringUtil.isNullOrEmpty(gdtAppId)) {
      adCallback(false, "appId为空");
      return;
    //加载广告
  }
  static Widget? loadSplash(AdinfoModel? adInfo, double width, double height,
      OnAdCallback adCallback) {
    if (adInfo == null) {
      adCallback(false, "广告信息为空");
      return null;
    }
    var adInfo = await getAdInfo(AdPosition.splash);
    if (adInfo == null) {
      adCallback(false, "appId为空");
      return;
    if (StringUtil.isNullOrEmpty(adInfo.type)) {
      adCallback(false, "广告类型为空");
      return null;
    }
    if (adInfo.type == "csj") {
      CSJAdUtil.loadSplash(adInfo.pid!, width, height, (success, msg) {});
      return CSJAdUtil.loadSplash(adInfo.pid!, width, height, adCallback);
    } else {
      GDTAdUtil.loadSplash(adInfo.pid!, (success, msg) {});
      return GDTAdUtil.loadSplash(adInfo.pid!, width, height, adCallback);
    }
  }
  static Widget? loadBanner(
      AdinfoModel? adInfo, double width, double height, OnAdCallback callback) {
    if (adInfo == null) {
      callback(false, "广告信息为空");
      return null;
    }
    //加载广告
    if (StringUtil.isNullOrEmpty(adInfo.type)) {
      callback(false, "广告类型为空");
      return null;
    }
    if (adInfo.type == "csj") {
      return CSJAdUtil.loadBanner(adInfo.pid!, width, height, callback);
    } else {
      return GDTAdUtil.loadBanner(adInfo.pid!, width, height, callback);
    }
  }
  static Widget? loadExpress(
      AdinfoModel? adInfo, double width, double height, OnAdCallback callback) {
    if (adInfo == null) {
      callback(false, "广告信息为空");
      return null;
    }
    if (StringUtil.isNullOrEmpty(adInfo.type)) {
      callback(false, "广告类型为空");
      return null;
    }
    if (adInfo.type == "csj") {
      return CSJAdUtil.loadExpress(adInfo.pid!, width, height, callback);
    } else {
      return GDTAdUtil.loadExpress(adInfo.pid!, width, height, callback);
    }
  }
  static loadReward(AdinfoModel? adInfo, OnAdCallback callback) async {
    if (adInfo == null) {
      callback(false, "广告信息为空");
      return null;
    }
    if (StringUtil.isNullOrEmpty(adInfo.type)) {
      callback(false, "广告类型为空");
      return null;
    }
    if (adInfo.type == "csj") {
      return CSJAdUtil.loadReward(adInfo.pid!, callback);
    } else {
      return GDTAdUtil.loadReward(adInfo.pid!, callback);
    }
  }
  static loadInterstitial(AdinfoModel? adInfo, OnAdCallback callback) async {
    if (adInfo == null) {
      return null;
    }
    if (StringUtil.isNullOrEmpty(adInfo.type)) {
      return null;
    }
    if (adInfo.type == "csj") {
      CSJAdUtil.loadInterstitial(adInfo.pid!, callback);
    } else {
      GDTAdUtil.loadInterstitial(adInfo.pid!, callback);
    }
  }
  static Future<AdinfoModel?> getAdInfo(String position) async {
@@ -50,12 +121,13 @@
    if (StringUtil.isNullOrEmpty(model.type)) {
      return null;
    }
    return model;
  }
}
class CSJAdUtil {
  static Future init() async {
    var csjAppId = await ConfigUtil.getConfig(ConfigKey.csjAppId);
    var csjAppId = "5240078";
    //初始化穿山甲
    if (!StringUtil.isNullOrEmpty(csjAppId)) {
      // if (Platform.isAndroid) {
@@ -79,7 +151,7 @@
      // }
      await FlutterUnionad.register(
          androidAppId: csjAppId!,
          androidAppId: csjAppId,
          //穿山甲广告 Android appid 必填
          iosAppId: "",
          //穿山甲广告 ios appid 必填
@@ -270,7 +342,7 @@
    );
  }
  static loadInterstitial(String pid) async {
  static loadInterstitial(String pid, OnAdCallback adCallback) async {
    FlutterUnionad.loadFullScreenVideoAdInteraction(
      androidCodeId: pid, //android 全屏广告id 必填
      iosCodeId: "", //ios 全屏广告id 必填
@@ -296,9 +368,11 @@
        },
        onFail: (error) {
          print("新模板渲染插屏广告错误 $error");
          adCallback(false, "新模板渲染插屏广告错误 $error");
        },
        onClose: () {
          print("新模板渲染插屏广告关闭");
          adCallback(true, "新模板渲染插屏广告关闭");
        },
        onReady: () async {
          print("新模板渲染插屏广告预加载准备就绪");
@@ -315,25 +389,22 @@
class GDTAdUtil {
  static Future init() async {
    var gdtAppId = await ConfigUtil.getConfig(ConfigKey.gdtAppId);
    var gdtAppId = "1200343363";
    //初始化广点通
    if (!StringUtil.isNullOrEmpty(gdtAppId)) {
      await FlutterTencentad.register(
        androidId: gdtAppId!, //androidId
        androidId: gdtAppId, //androidId
        iosId: "", //iosId
        debug: true, //是否显示日志log
      );
    }
  }
  static loadSplash(String? pid, OnAdCallback adCallback) {
    if (pid == null) {
      adCallback(false, "pid为空");
      return;
    }
    FlutterTencentad.splashAdView(
  static Widget? loadSplash(
      String? pid, double width, double height, OnAdCallback adCallback) {
    return FlutterTencentad.splashAdView(
      //android广告id
      androidId: pid,
      androidId: pid!,
      //ios广告id
      iosId: "",
      ////设置开屏广告从请求到展示所花的最大时长(并不是指广告曝光时长),取值范围为[1500, 5000]ms
@@ -351,13 +422,156 @@
        },
        onClose: () {
          print("开屏广告关闭");
          adCallback(true, "");
          adCallback(true, "开屏广告关闭");
        },
        onExpose: () {
          print("开屏广告曝光");
        },
        onFail: (code, message) {
          adCallback(true, message);
          adCallback(false, message);
        },
      ),
    );
  }
  static Widget loadBanner(
      String pid, double width, double height, OnAdCallback callback) {
    return FlutterTencentad.bannerAdView(
      //android广告id
      androidId: pid,
      //ios广告id
      iosId: "",
      //广告宽 单位dp
      viewWidth: width,
      //广告高  单位dp   宽高比应该为6.4:1
      viewHeight: height,
      // 广告回调
      callBack: FlutterTencentadBannerCallBack(
        onShow: () {
          print("Banner广告显示");
        },
        onFail: (code, message) {
          print("Banner广告错误 $code $message");
          callback(false, "Banner广告错误  $code $message");
        },
        onClose: () {
          print("Banner广告关闭");
          callback(true, "Banner广告关闭");
        },
        onExpose: () {
          print("Banner广告曝光");
        },
        onClick: () {
          print("Banner广告点击");
        },
      ),
    );
  }
  static Widget loadExpress(
      String pid, double width, double height, OnAdCallback callback) {
    return FlutterTencentad.expressAdView(
        //android广告id
        androidId: pid,
        //ios广告id
        iosId: "",
        //广告宽 单位dp
        viewWidth: width.toInt(),
        //广告高  单位dp
        viewHeight: height.toInt(),
        //回调事件
        callBack: FlutterTencentadExpressCallBack(
          onShow: () {
            print("动态信息流广告显示");
          },
          onFail: (code, message) {
            print("动态信息流广告错误 $code $message");
          },
          onClose: () {
            print("动态信息流广告关闭");
          },
          onExpose: () {
            print("动态信息流广告曝光");
          },
          onClick: () {
            print("动态信息流广告点击");
          },
        ));
  }
  static loadReward(String pid, OnAdCallback adCallback) async {
    await FlutterTencentad.loadRewardVideoAd(
        //android广告id
        androidId: pid,
        //ios广告id
        iosId: "",
        //用户id
        userID: "",
        //奖励
        rewardName: "VIP",
        //奖励数
        rewardAmount: 1,
        //扩展参数 服务器回调使用
        customData: "");
    FlutterTencentAdStream.initAdStream(
      //激励广告
      flutterTencentadRewardCallBack:
          FlutterTencentadRewardCallBack(onShow: () {
        print("激励广告显示");
      }, onClick: () {
        print("激励广告点击");
      }, onFail: (code, message) {
        print("激励广告失败 $code $message");
        adCallback(false, "激励广告失败");
      }, onClose: () {
        print("激励广告关闭");
      }, onReady: () async {
        print("激励广告预加载准备就绪");
        await FlutterTencentad.showRewardVideoAd();
      }, onUnReady: () {
        print("激励广告预加载未准备就绪");
      }, onVerify: (transId, rewardName, rewardAmount) {
        print("激励广告奖励  $transId   $rewardName   $rewardAmount");
        adCallback(true, "激励广告奖励");
      }, onFinish: () {
        print("激励广告完成");
      }),
    );
  }
  static loadInterstitial(String pid, OnAdCallback adCallback) async {
    await FlutterTencentad.loadUnifiedInterstitialAD(
      //android广告id
      androidId: pid,
      //ios广告id
      iosId: "",
      //是否全屏
      isFullScreen: false,
    );
    FlutterTencentAdStream.initAdStream(
      flutterTencentadInteractionCallBack: FlutterTencentadInteractionCallBack(
        onShow: () {
          print("插屏广告显示");
        },
        onClick: () {
          print("插屏广告点击");
        },
        onFail: (code, message) {
          print("插屏广告失败 $code $message");
          adCallback(false, "插屏广告失败 $code $message");
        },
        onClose: () {
          print("插屏广告关闭");
          adCallback(true, "插屏广告关闭");
        },
        onReady: () async {
          print("插屏广告预加载准备就绪");
          await FlutterTencentad.showUnifiedInterstitialAD();
        },
        onUnReady: () {
          print("插屏广告预加载未准备就绪");
        },
      ),
    );