激励广告

激励广告

此章节将演示如何请求在Flutter环境下请求与展示激励广告

激励广告是用户通过观看短视频,获取应用内奖励(游戏的复活,任务奖励,游戏金币)等,具体场景由开发者定义。

激励广告请求

提示

调用加载并展示时,不需要额外判断广告加载情况和处理预加载广告对象过期后重新请求的问题。

需要屏蔽用户的重复点击操作,防止用户频繁点击导致的广告嵌套播放

调用ZJAndroid.loadRewardedAd方法请求激励广告

class ZJAndroid {
  /// 加载激励广告
  static void loadRewardVideo(

      /// 广告位ID
      String posId,

      /// 用户ID,必填
      String userId,

      /// 回调。具体事件见 example
      Function(ZJEvent ret) rewardListener, {
        /// 是否开启视频声音
        bool videoSoundEnable = true,

        /// 透传信息(返回到服务端发校验接口)
        String extra = "",

        /// 是否为预加载,默认false
        /// 非预加载时,加载成功后直接播放
        /// 预加载时仅回调成功/失败,需要搭配[showRewardVideo]方法展示
        bool isPreLoad = false,

        /// FLAGS
        int flags = 0,
      });
}

激励广告回调说明

ret.action说明
ZJEventAction.onAdError广告展示失败
ret.code:错误码,非错误事件为0
ret.msg:错误信息,非错误事件为空字符串
ZJEventAction.onAdShow广告展示成功
ZJEventAction.onAdClick广告点击
ZJEventAction.onAdRewardVerify满足条件,可以发奖
ZJEventAction.onAdClose广告关闭

激励广告展示

提示

激励广告为耗时操作,建议在增加时增加一个加载提示对话框

example/lib/ad/reward_video.dart
/// 加载并展示激励广告
void _loadRewardVideo(BuildContext context, String posId) {
  _showLoading(context);
  setState(() {
    isRequesting = true;
  });
  ZJAndroid.loadRewardVideo(
      // 广告位ID
      posId,
      // 用户ID,必填
      TestPosId.testUserId,
      // 回调
      (ret) {
        switch (ret.action) {
          // 广告出错
          case ZJEventAction.onAdError:
            Navigator.of(_dialogContext).pop();
            _reset(context);
            Fluttertoast.showToast(msg: "激励广告错误:${ret.msg}");
            if (kDebugMode) {
              print("${ret.action}:${ret.code}-${ret.msg}");
            }
            break;
          // 展示成功
          case ZJEventAction.onAdShow:
            Fluttertoast.showToast(msg: "激励广告展示");
            break;
          // 点击广告
          case ZJEventAction.onAdClick:
            Fluttertoast.showToast(msg: "激励广告点击");
            break;
          // 满足条件,可以发奖
          case ZJEventAction.onAdRewardVerify:
            Fluttertoast.showToast(msg: "激励广告发奖");
            break;
          // 关闭
          case ZJEventAction.onAdClose:
            Navigator.of(context).pop(1);
            _reset(context);
            Fluttertoast.showToast(msg: "激励广告关闭");
            break;
          default:
            // ignore
        }
      }, flags: ZJFlags.FLAG_IGNORE_CONFIG_ERROR);
}

激励广告预加载

建议使用加载并展示方式请求广告。使用预加载时需要指定属性isPreLoad: true预加载模式需要判断加载状态,加载成功的回调后再播放广告,否则回调播放错误。

激励广告预加载示例

提示

广告的请求行为与展示行为是对应关系,即一次请求对应一次展示,重复展示时会报错

预加载广告的有效时间为20分钟,过期后展示会回调错误,需要重新请求

预加载对于Flutter全局缓存一个对象,不需要在每个页面去单独预加载。可以重复预加载广告,新返回的广告对象会替换旧对象

example/lib/ad/reward_video.dart
/// 预加载激励广告
void _preloadRewardVideo(String posId) {
  ZJAndroid.loadRewardVideo(posId, TestPosId.testUserId, (ret) {
    // 预加载仅回调加载失败和加载成功
    switch (ret.action) {
      // 广告出错
      case ZJEventAction.onAdError:
        _reset(context);
        Fluttertoast.showToast(msg: "激励广告错误:${ret.msg}");
        if (kDebugMode) {
          print("${ret.action}:${ret.code}-${ret.msg}");
        }
        break;
      // 加载成功
      case ZJEventAction.onAdLoaded:
        _reset(context);
        Fluttertoast.showToast(msg: "激励广告加载成功");
        break;
      default:
        break;
    }
  },
      // 指定预加载
      isPreLoad: true);
}

/// 展示激励广告
/// 仅预加载时需要手动调用展示方法
/// 需要预加载请求回调[ZJEventAction.onAdLoaded]调用,否则回调错误
/// 预加载状态全局生效,有效期20分钟,过期时会在播放时回调错误
void _showRewardVideo() {
  ZJAndroid.showRewardVideo((ret) {
    switch (ret.action) {
      // 广告出错
      case ZJEventAction.onAdError:
        _reset(context);
        Fluttertoast.showToast(msg: "激励广告错误:${ret.msg}");
        if (kDebugMode) {
          print("${ret.action}:${ret.code}-${ret.msg}");
        }
        break;
      // 展示成功
      case ZJEventAction.onAdShow:
        Fluttertoast.showToast(msg: "激励广告展示");
        break;
      // 点击广告
      case ZJEventAction.onAdClick:
        Fluttertoast.showToast(msg: "激励广告点击");
        break;
      // 满足条件,可以发奖
      case ZJEventAction.onAdRewardVerify:
        Fluttertoast.showToast(msg: "激励广告发奖");
        break;
      // 关闭
      case ZJEventAction.onAdClose:
        Fluttertoast.showToast(msg: "激励广告关闭");
        break;
      default:
        // ignore
    }
  });
}