近期我的项目中须要用到穿山甲广告,看了几个插件,发现满足不了本人的需要,我的项目中须要用到的广告都须要应用原生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
);
}
发表回复