开屏广告

开屏广告

请确保SDK已初始化成功再请求广告

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

开屏广告分为原生开屏广告开屏广告组件两种类型:

  • 原生开屏广告是拉起一个新的AndroidActivity,接入相对简单,效率更高;

  • 原生开屏组件可以集成在当前的页面中,使用更加灵活。

原生开屏广告

调用ZJAndroid.loadSplashAd方法请求原生开屏广告并处理结果。其中请求失败与展示失败事件合并为了展示失败的Event:

class ZJAndroid {
  /// 加载原生开屏
  static void loadSplashAd(

      /// 广告位ID
      String posId,
      {
        /// 自定义背景图的原生资源类型,仅支持(default|mipmap|drawable),其他值无效
        /// default时不需要配置bgResName,SDK会读取原生的默认启动页背景
        /// mipmap或drawable时,需要配置资源名,默认或原生资源不存在时默认主题背景
        String bgResType = "",

        /// 自定义背景图的原生资源名,需要搭配 bgResType 传入,默认开屏页为白色背景
        String bgResName = "",

        /// 开屏回调。具体事件见 example
        Function(ZJEvent ret)? splashListener});
}

原生开屏回调说明

ret.action说明
ZJEventAction.onAdError广告展示失败
ret.code:错误码,非错误事件为0
ret.msg:错误信息,非错误事件为空字符串
ZJEventAction.onAdClose广告展示成功并已关闭

原生开屏广告示例

example/lib/ad/splash.dart
/// 原生加载广告
void _loadSplashAd(String posId) {
  ZJAndroid.loadSplashAd(
      // 广告位ID
      posId,
      // 自定义背景图的原生资源类型,仅支持(default|mipmap|drawable),其他值无效
      // default时不需要配置bgResName,SDK会读取原生的默认启动页背景
      // mipmap或drawable时,需要配置资源名,默认或原生资源不存在时默认主题背景
      bgResType: "default",
      // 回调
      splashListener: (ret) {
        // 原生加载仅回调请求失败和关闭
        switch (ret.action) {
          // 广告出错
          case ZJEventAction.onAdError:
            Fluttertoast.showToast(msg: "开屏错误:${ret.msg}");
            if (kDebugMode) {
              print("${ret.action}:${ret.code}-${ret.msg}");
            }
            break;
          // 广告关闭
          case ZJEventAction.onAdClose:
            Fluttertoast.showToast(msg: "开屏关闭");
            break;
          default:
            // ignore
        }
      });
}

开屏广告组件

相比原生接入,Widget接入更加灵活,可以直接嵌入到FlutterView中。但需要处理View的移除,且需要保证容器的宽度大于屏幕宽度(非当前界面,是包含顶部StatusBar的整体屏幕)的95%,高度大于屏幕高度的85%,否则会出现展示无效,不会计费的问题。

/// 开屏广告视图
class ZJSplashView extends StatelessWidget {
  /// 广告位ID
  final String posId;

  /// 宽
  final double width;

  /// 高
  final double height;

  /// 回调
  final Function(ZJEvent ret) splashListener;

  const ZJSplashView(this.posId,
      {Key? key,
        required this.width,
        required this.height,
        required this.splashListener})
      : super(key: key);
}

开屏组件回调说明

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

开屏组件接入示例

example/lib/ad/splash.dart
child: ZJSplashView(
    // 广告位ID
    posId,
    width: double.infinity,
    height: double.infinity,
    // 回调
    splashListener: (ret) {
      switch (ret.action) {
        // 广告出错
        case ZJEventAction.onAdError:
          Fluttertoast.showToast(msg: "开屏错误:${ret.msg}");
          if (kDebugMode) {
            print("${ret.action}:${ret.code}-${ret.msg}");
          }
          _reset();
          break;
        // 展示成功
        case ZJEventAction.onAdShow:
          Fluttertoast.showToast(msg: "开屏展示");
          break;
        // 点击广告
        case ZJEventAction.onAdClick:
          Fluttertoast.showToast(msg: "开屏点击");
          break;
        // 关闭
        case ZJEventAction.onAdClose:
          Fluttertoast.showToast(msg: "开屏关闭");
          _reset();
          break;
        default:
        // ignore
      }
    },
  ),