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