关于flutter:Flutter应用集成头条穿山甲广告

2次阅读

共计 7710 个字符,预计需要花费 20 分钟才能阅读完成。

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