近期我的项目中须要用到穿山甲广告,看了几个插件,发现满足不了本人的需要,我的项目中须要用到的广告都须要应用原生view做嵌入。所以本人写了一个插件来实现相干的广告。我的项目仓库flutter_unionad
集成步骤
1、SDK初始化
await FlutterUnionad.register( androidAppId: "5098580", //穿山甲广告 Android appid 必填 iosAppId: "5098580", //穿山甲广告 ios appid 必填 useTextureView: true, //应用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView抵触的场景,能够应用TextureView 选填 appName: "unionad_test", //appname 必填 allowShowNotify: true, //是否容许sdk展现告诉栏提醒 选填 allowShowPageWhenScreenLock: true, //是否在锁屏场景反对展现广告落地页 选填 debug: true, //是否显示debug日志 supportMultiProcess: true, //是否反对多过程,true反对 选填 directDownloadNetworkType: [ FlutterUnionadNetCode.NETWORK_STATE_2G, FlutterUnionadNetCode.NETWORK_STATE_3G, FlutterUnionadNetCode.NETWORK_STATE_4G, FlutterUnionadNetCode.NETWORK_STATE_WIFI ]); //容许间接下载的网络状态汇合 选填
2、获取SDK版本
await FlutterUnionad.getSDKVersion();
3、申请权限
FlutterUnionad.requestPermissionIfNecessary( callBack: FlutterUnionadPermissionCallBack( notDetermined: () { print("权限未确定"); }, restricted: () { print("权限限度"); }, denied: () { print("权限回绝"); }, authorized: () { print("权限批准"); }, ), );
Android获取定位、照片权限,只返回胜利
Android相干权限为非必须权限,可抉择在AndroidManifest.xml中申明
插件1.2.2当前不在默认集成权限,需手动配置
<!--可选权限--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/><uses-permission android:name="android.permission.GET_TASKS"/><!--可选,穿山甲提供“获取地理位置权限”和“不给予地理位置权限,开发者传入地理位置参数”两种形式上报用户地位,两种形式均可不选,增加地位权限或参数将帮忙投放定位广告--><!--请留神:无论通过何种形式提供给穿山甲用户地理位置,均需向用户申明地理位置权限将利用于穿山甲广告投放,穿山甲不强制获取地理位置信息--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 穿山甲3400版本新增:倡议增加“query_all_package”权限,穿山甲将通过此权限在Android R零碎上断定广告对应的利用是否在用户的app上装置,防止投放谬误的广告,以此进步用户的广告体验。若增加此权限,须要在您的用户隐衷文档中申明! --><uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/><!-- 如果有视频相干的广告且应用textureView播放,请务必增加,否则黑屏 -->
IOS 版本14及以上获取ATT权限,依据返回后果具体操作业务逻辑
4、开屏广告
FlutterUnionad.splashAdView( //是否应用个性化模版 设定widget宽高 mIsExpress: true, //android 开屏广告广告id 必填 androidCodeId: "887367774", //ios 开屏广告广告id 必填 iosCodeId: "887367774", //是否反对 DeepLink 选填 supportDeepLink: true, // 冀望view 宽度 dp 选填 mIsExpress=true必填 expressViewWidth: 750, //冀望view高度 dp 选填 mIsExpress=true必填 expressViewHeight: 800, //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, callBack: FlutterUnionadSplashCallBack( onShow: () { print("开屏广告显示"); }, onClick: () { print("开屏广告点击"); Navigator.pop(context); }, onFail: (error) { print("开屏广告失败 $error"); }, onFinish: () { print("开屏广告倒计时完结"); Navigator.pop(context); }, onSkip: () { print("开屏广告跳过"); Navigator.pop(context); }, onTimeOut: () { print("开屏广告超时"); }, ), ),
5、banner广告
FlutterUnionad.bannerAdView( //andrrid banner广告id 必填 androidCodeId: "945410197", //ios banner广告id 必填 iosCodeId: "945410197", //是否应用个性化模版 mIsExpress: true, //是否反对 DeepLink 选填 supportDeepLink: true, //一次申请广告数量 大于1小于3 必填 expressAdNum: 3, //轮播距离事件 30-120秒 选填 expressTime: 30, // 冀望view 宽度 dp 必填 expressViewWidth: 600.5, //冀望view高度 dp 必填 expressViewHeight: 120.5, //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, //广告事件回调 选填 callBack: FlutterUnionadBannerCallBack( onShow: () { print("banner广告加载实现"); }, onDislike: (message){ print("banner不感兴趣 $message"); }, onFail: (error){ print("banner广告加载失败 $error"); }, onClick: (){ print("banner广告点击"); } ), ),
6、信息流广告
FlutterUnionad.nativeAdView( androidCodeId: "945417699", //android 信息流广告id 必填 iosCodeId: "945417699", //ios banner广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 expressViewWidth: 375.5, // 冀望view 宽度 dp 必填,如果设为0则依据返回广告宽高做自适应调整 expressViewHeight: 275.5, //冀望view高度 dp 必填 expressNum: 2, mIsExpress: true, //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, //一次申请广告数量 大于1小于3 必填 callBack: FlutterUnionadNativeCallBack( onShow: () { print("信息流广告显示"); }, onFail: (error) { print("信息流广告失败 $error"); }, onDislike: (message) { print("信息流广告不感兴趣 $message"); }, onClick: () { print("信息流广告点击"); }, ), ),
7、插屏广告
不举荐应用,请应用新模版渲染插屏广告
await FlutterUnionad.interactionAd( androidCodeId: "945417892", //andrrid 插屏广告id 必填 iosCodeId: "945417892", //ios 插屏广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 expressViewWidth: 300.0, // 冀望view 宽度 dp 必填 expressViewHeight: 450.0, //冀望view高度 dp 必填 expressNum: 2, //一次申请广告数量 大于1小于3 必填 //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, );
8、激励视频广告
预加载激励视频广告
FlutterUnionad.loadRewardVideoAd( mIsExpress: true, //是否个性化 选填 androidCodeId: "945418088", //Android 激励视频广告id 必填 iosCodeId: "945418088", //ios 激励视频广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 rewardName: "100金币", //处分名称 选填 rewardAmount: 100, //处分数量 选填 userID: "123", // 用户id 选填 orientation: FlutterUnionadOrientation.VERTICAL, //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, //视屏方向 选填 mediaExtra: null, //扩大参数 选填 );
显示激励视频广告
await FlutterUnionad.showRewardVideoAd();
监听激励视频后果
FlutterUnionad.FlutterUnionadStream.initAdStream( //激励广告 flutterUnionadRewardAdCallBack: FlutterUnionadRewardAdCallBack( onShow: (){ print("激励广告显示"); }, onClick: (){ print("激励广告点击"); }, onFail: (error){ print("激励广告失败 $error"); }, onClose: (){ print("激励广告敞开"); }, onSkip: (){ print("激励广告跳过"); }, onVerify: (rewardVerify,rewardAmount,rewardName){ print("激励广告处分 $rewardVerify $rewardAmount $rewardName"); }, onReady: () async{ print("激励广告预加载准备就绪"); //显示激励广告 await FlutterUnionad.showRewardVideoAd(); }, onUnReady: (){ print("激励广告预加载未准备就绪"); }, ), );
9、draw视频广告
FlutterUnionad.drawFeedAdView( androidCodeId: "945426252", // Android draw视屏广告id 必填 iosCodeId: "945426252", //ios draw视屏广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 expressViewWidth: 600.5, // 冀望view 宽度 dp 必填 expressViewHeight: 800.5, //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, //冀望view高度 dp 必填 callBack: FlutterUnionadDrawFeedCallBack( onShow: () { print("draw广告显示"); }, onFail: (error) { print("draw广告加载失败 $error"); }, onClick: () { print("draw广告点击"); }, onDislike: (message) { print("draw点击不喜爱 $message"); }, onVideoPlay: () { print("draw视频播放"); }, onVideoPause: () { print("draw视频暂停"); }, onVideoStop: () { print("draw视频完结"); }), ),
10、全屏视频广告
不举荐应用,请应用新模版渲染插屏广告
FlutterUnionad.fullScreenVideoAd( androidCodeId: "945491318", //android 全屏广告id 必填 iosCodeId: "945491318", //ios 全屏广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 orientation: FlutterUnionadOrientation.VERTICAL, //视屏方向 选填 //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, );
11、新模版渲染插屏广告 分为全屏和插屏
预加载新模版渲染插屏广告
FlutterUnionad.loadFullScreenVideoAdInteraction( androidCodeId: "946201351", //android 全屏广告id 必填 iosCodeId: "946201351", //ios 全屏广告id 必填 supportDeepLink: true, //是否反对 DeepLink 选填 orientation: FlutterUnionadOrientation.VERTICAL, //视屏方向 选填 //管制下载APP前是否弹出二次确认弹窗 downloadType: FlutterUnionadDownLoadType.DOWNLOAD_TYPE_POPUP, );
显示新模版渲染插屏广告
await FlutterUnionad.showFullScreenVideoAdInteraction();
新模版渲染插屏广告后果监听
FlutterUnionad.FlutterUnionadStream.initAdStream( // 新模板渲染插屏广告回调 flutterUnionadNewInteractionCallBack: FlutterUnionadNewInteractionCallBack( onShow: () { print("新模板渲染插屏广告显示"); }, onSkip: () { print("新模板渲染插屏广告跳过"); }, onClick: () { print("新模板渲染插屏广告点击"); }, onFinish: () { print("新模板渲染插屏广告完结"); }, onFail: (error) { print("新模板渲染插屏广告谬误 $error"); }, onClose: () { print("新模板渲染插屏广告敞开"); }, onReady: () async{ print("新模板渲染插屏广告预加载准备就绪"); //显示新模板渲染插屏 await FlutterUnionad.showFullScreenVideoAdInteraction(); }, onUnReady: (){ print("新模板渲染插屏广告预加载未准备就绪"); }, ), );
12、Android隐衷权限管制
注:必须在FlutterUnionad.register初始化前应用才失效
if (Platform.isAndroid) { await FlutterUnionad.andridPrivacy( isCanUseLocation: false, //是否容许SDK被动应用地理位置信息 true能够获取,false禁止获取。默认为true lat: 1.0,//当isCanUseLocation=false时,可传入地理位置信息,穿山甲sdk应用您传入的地理位置信息lat lon: 1.0,//当isCanUseLocation=false时,可传入地理位置信息,穿山甲sdk应用您传入的地理位置信息lon isCanUsePhoneState: false,//是否容许SDK被动应用手机硬件参数,如:imei imei: "123",//当isCanUsePhoneState=false时,可传入imei信息,穿山甲sdk应用您传入的imei信息 isCanUseWifiState: false,//是否容许SDK被动应用ACCESS_WIFI_STATE权限 isCanUseWriteExternal: false,//是否容许SDK被动应用WRITE_EXTERNAL_STORAGE权限 oaid: "111",//开发者能够传入oaid ); }