视频内容
视频内容
此章节将演示如何请求在Flutter
环境下请求与展示视频内容
视频内容分为原生视频内容
和视频内容组件
两种类型:
原生视频内容是拉起一个新的AndroidActivity,接入相对简单,效率更高;
视频内容组件可以集成在当前的页面中,使用更加灵活。
原生视频内容
调用ZJAndroid.contentAd
方法请求原生视频内容并处理结果。其中请求失败与展示失败事件合并为了展示失败的Event:
class ZJAndroid {
/// 原生展示视频内容
static void contentAd(
/// 广告位ID
String posId, {
/// 回调。具体事件见 example
Function(ZJEvent ret)? contentAdListener,
});
}
原生视频内容回调说明
ret.action | 说明 |
---|---|
ZJEventAction.onAdError | 广告展示失败 ret.code:错误码,非错误事件为0 ret.msg:错误信息,非错误事件为空字符串 |
ZJEventAction.onAdClose | 广告展示成功并已关闭 |
原生视频内容接入示例
example/lib/content_ad.dart
/// 原生加载广告
void _loadContentAd(String posId) {
ZJAndroid.contentAd(
// 广告位ID
posId,
contentAdListener: (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的移除
注意
使用视频内容组件
加载时,需要确保 Android 的MainActivity
继承io.flutter.embedding.android.FlutterFragmentActivity
,Flutter会默认继承 io.flutter.embedding.android.FlutterActivity
。详见example/MainActivity
/// 视频内容视图
class ZJContentAdView extends StatelessWidget {
/// 广告位ID
final String posId;
/// 宽
final double width;
/// 高
final double height;
/// 回调
final Function(ZJEvent ret)? contentAdListener;
const ZJContentAdView(this.posId,
{Key? key,
required this.width,
required this.height,
this.contentAdListener})
: super(key: key);
}
视频内容组件回调说明
ret.action | 说明 |
---|---|
ZJEventAction.onAdError | 广告展示失败 ret.code:错误码,非错误事件为0 ret.msg:错误信息,非错误事件为空字符串 |
ZJEventAction.onAdShow | 广告展示成功 |
ZJEventAction.onAdClose | 广告关闭 |
视频内容组件接入示例
example/lib/content_ad.dart
child: ZJContentAdView(
// 广告位ID
posId,
width: double.infinity,
height: double.infinity,
contentAdListener: (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.onAdClose:
Fluttertoast.showToast(msg: "视频内容关闭");
break;
default:
// ignore
}
},
),