天意文档

2021-08-02  本文已影响0人  我要离开浪浪山

一、广告配置

1、初始化

//application里oncreate
AdvManager.init(applicationContext,应用名,穿山甲应用id,开屏广告保底代码位id,配置信息加载成功回调)
}

//在mainactivity里的oncreate方法里调用
AdvManager.saveMainActivity(this)

//在mainactivity里的ondestroy方法里调用
AdvManager.destroyMainActivity()

ps:广告预加载的时候需要传入activity对象,经测试,传入application的context也不影响广告展示,可优化

//示例
private fun initAdvertisement() {
      //InformationAdPreLoadHelper
     //新广告接入 应用名,穿山甲应用id,开屏广告保底代码位id        AdvManager.init(this,AppKeyUtils.AD_APPLICATION_NAME,AppKeyUtils.AD_PANGOLIN_ID,AppKeyUtils.AD_OPEN_SCREEN_MINIMUM_ID)
        AdvManager.setMistakeClickParms(HashMap<String,Float>().apply{
            put(AppKeyUtils.AD_ORIGINAL_ID_1,0.2f) //信息流
            put(AppKeyUtils.AD_PLUG_SCREEN_ID_1,0.1f) //插屏
            put(AppKeyUtils.AD_OPEN_SCREEN_ID_1,0f)  //开屏
            put(AppKeyUtils.AD_MOTIVATIONAL_VIDEO_ID_3,0f)  //新人红包
            put(AppKeyUtils.AD_MOTIVATIONAL_VIDEO_ID_2,0.05f)  //签到红包
            put(AppKeyUtils.AD_MOTIVATIONAL_VIDEO_ID_4,0.1f)  //提现
            put(AppKeyUtils.AD_MOTIVATIONAL_VIDEO_ID_1,0.05f)  //悬浮&天天

            put(AppKeyUtils.TW_YZT_ORIGINAL_UNITID_1,0.2f)  //应用外弹框
        })
    }

2、api 误点击

//误点击
AdvManager.setMistakeClickParms({广告为id:误点击概率})
ps:信息流没有内置关闭按钮,误点击功能需要在项目中植入
//信息流误触实现
private var expressView: View? = null
AdvManager.showInformationAd(信息流广告位id,容器宽度,容器高度,信息流容器,object:OnAdListener{
  //在信息流的展示回调中实现该方法,保存expressView,用于后续误触
  override fun onAdExpressView(view: View) {
    super.onAdExpressView(view)
    expressView = view 
  }
})

业务关闭按钮.setOnClickListener(object : View.OnClickListener{
  private var flag = false 
  override fun onClick(v: View?){
    if (!flag && expressView != null && expressView is ViewGroup && MistakeClickUtil.checkInformationAdMistakeClick(信息流广告位id,expressView as ViewGroup)) {
      //误触了信息流  
      //误触的概率在setMistakeClickParms的时候配置
      flag = true
    }else{
      //没误触信息流
      关闭弹框等逻辑。。。。
    }
  }
})

二、使用:

1、开屏

//展示开屏广告,无预加载
AdvManager.showSplashAd(广告位id,object:OnSplashAdListener{
  onAdDismiss(){}//广告播放时间结束时调用。
  onAdClicked(){}//Splash广告的点击回调
  onAdSkip(){}//点击跳过时回调
  onAdShow(){}//Splash广告的展示回调
  onAdLoadFail(){}//加载失败回调
})
 //示例
 private fun openScreen() {
        //开屏广告
        AdvManager.showSplashAd(AppKeyUtils.AD_OPEN_SCREEN_ID_1, object : OnSplashAdListener {
            override fun onAdShow() {
                super.onAdShow()
                //Splash广告的展示回调
                AppLogUtils.onAppMultipleLog(Constant.ADS_HOT)
                Log.d(Tag, "=====onAdShow=====")
            }

            override fun onAdClick() {
                super.onAdClick()
                //Splash广告的点击回调
                Log.d(Tag, "=====onAdDismiss=====")
                TimeTools.refreshCurrentFiveseconds()
                SkipToWeb()
            }

            override fun onAdDismiss() {
                super.onAdDismiss()
                //广告播放时间结束时调用。
                Log.d(Tag, "=====onAdDismiss=====")
                //进入主页面
                TimeTools.refreshCurrentFiveseconds()
                SkipToWeb()
            }

            override fun onAdLoadFail(error: String) {
                super.onAdLoadFail(error)
                //加载失败回调
                Log.d(Tag, "onAdLoadFail=======onError=====${error}")
                //进入主页面
                TimeTools.refreshCurrentFiveseconds()
                SkipToWeb()
            }

            override fun onAdSkip() {
                super.onAdSkip()
                //点击跳过时回调
                Log.d(Tag, "=====onAdSkip=====")
                //进入主页面
                TimeTools.refreshCurrentFiveseconds()
                SkipToWeb()
            }
        })
    }

2、插屏

//展示插屏广告,带预加载
AdvManager.showInterstitialAd(广告位id,object:OnAdListener{
  onAdClose(){}//广告关闭时调用。
  onAdClicked(){}//广告的点击回调
  onAdShow(){}//广告的展示回调
})

//无预加载
AdvManager.showInterstitialAdImediately((广告位id,object:OnAdListener{
  onAdClose(){}//广告关闭时调用。
  onAdClicked(){}//广告的点击回调
  onAdShow(){}//广告的展示回调
  onAdLoadSuccess(){}
  onAdLoadFail(){}
)
//示例
  fun showChaping(adid: String, callback: ((Boolean) -> Unit)?) {
            if (!ApplicationHelp.isShowAd) {
                callback?.invoke(false)
                return
            }
            GlobalScope.launch(Dispatchers.Main) {
                AdvManager.showInterstitialAd(adid,object : OnAdListener{
                    override fun onAdClose() {
                        super.onAdClose()
                        callback?.invoke(false)
                    }

                    override fun onAdShow() {
                        super.onAdShow()
                        callback?.invoke(true)
                    }

                    override fun onAdClick() {
                        super.onAdClick()
                    }

                    override fun onAdLoadFail(error: String) {
                        super.onAdLoadFail(error)
                        callback?.invoke(false)
                    }
                })
            }
        }

3、信息流

//展示信息流广告,带预加载,自适应容器高度(注意:宽度种类不要太多,会影响展示率)
//容器高度写0为自适应高度渲染
AdvManager.showInformationAd(广告位id,容器宽度,容器高度,信息流容器,object:OnAdListener{
  onAdClicked(){}//广告的点击回调
  onAdShow(){}//广告的展示回调
  onAdRenderFail(){}//渲染失败
})

//无预加载,自适应容器宽度(可自己指定广告显示的宽高)
AdvManager.showInformationAdImediately(广告位id,信息流容器,object:OnAdListener{
  onAdLoadSuccess(){}
  onAdLoadFail(){}//广告加载失败
  onAdClicked(){}//广告的点击回调
  onAdShow(){}//Splash广告的展示回调
  onAdRenderFail(){}//渲染失败
})

1、无预加载信息流广告示例

//1、调用 信息流广告 ,无预加载
   var view=LayoutInflater.from(context).inflate(R.layout.dialog_manfen_hongbao,null)
        var dialog_xiagua=view.findViewById<FrameLayout>(R.id.dialog_xiagua)
        var scale = context.getResources().getDisplayMetrics().density
        var width=(DensityUtil.getScreenWidthPx(context)/scale).toInt()
        AdvertUtils.showxinxiImediatelyT(dialog_xiagua,AppKeyUtils.AD_ORIGINAL_ID_1,object : OnAdListener{
            override fun onAdShow() {
                super.onAdShow()
                AppLogUtils.onAppMultipleLog(Constant.ADS_DRAW_30OUTCG)
                dialog_xiagua.background=context.getDrawable(R.drawable.white)
            }

        },width,260)

//2、 信息流广告被调用者,无预加载
  fun showxinxiImediatelyT(viewGroup: ViewGroup,id: String, listener: OnAdListener?=null,widthdp: Int,height:Int) {
            if (!ApplicationHelp.isAllShowAd) {
                listener?.onAdShow()
                return
            }
            AdvManager.showInformationAdImediately(id, viewGroup ,listener,widthdp,height)
        }

2、无预加载信息流广告示例

  //1、调用
  AdvertUtils.AdInformationFlowShow(AdvertUtils.getWidthScreenReduce(100),guanggao,object :
                OnInformationAdListener {
                override fun onAdExpressView(view: View) {
                    super.onAdExpressView(view)
                    expressView = view
                    AppLogUtils.onAppMultipleLog(Constant.ADS_DRAW_HANG)
                }
            })
 //2、被调用
 fun AdInformationFlowShow( widthdp: Int, viewGroup: ViewGroup, listener: OnAdListener?=null) {
            if (!ApplicationHelp.isAllShowAd) {
                listener?.onAdShow()
                return
            }
            AdvManager.showInformationAd(AppKeyUtils.AD_ORIGINAL_ID_1,widthdp,viewGroup,listener)
        }


4、激励视频

//展示激励视频广告,带预加载
AdvManager.showRewardVideo(广告位id,object:OnRewardAdListener{
  onVideoComplete(){}//广告播放时间结束时调用。
  onAdClicked(){}//广告的点击回调
  onVideoSkip(){}//视频点击跳过时回调
  onAdShow(){}//广告的展示回调
  onAdRenderFail(){}//视频播放失败
  onAdClose(){}//广告关闭
})

//无预加载
AdvManager.showInterstitialAdImediately((广告位id,object:OnRewardAdListener{
  onAdLoadSuccess(){}
  onVideoCached(){}
  onAdLoadFail(){}
  onVideoComplete(){}//广告播放时间结束时调用。
  onAdClicked(){}//广告的点击回调
  onVideoSkip(){}//视频点击跳过时回调
  onAdShow(){}//广告的展示回调
  onAdRenderFail(){}//视频播放失败
  onAdClose(){}//广告关闭
)

1、不带预加载示例:

      fun showRewardVideoImediately(slotId: String, result:((Boolean)-> Unit)?) {
            TimeOut.getInstance().isShowCompleted=false
            if (!ApplicationHelp.isAllShowAd) {
                result?.invoke(true)
                return
            }
            AdvManager.showRewardVideoImediately(slotId, object : OnRewardAdListener {
                override fun onAdLoadFail(error: String) {
                    super.onAdLoadFail(error)
                    result?.invoke(false)
                    TimeOut.getInstance().isShowCompleted=true
                }

                /**
                 * 视频播放失败的回调 - Mintegral GDT Admob广告不存在该回调
                 */
                override fun onAdRenderFail(error: String) {
                    super.onAdRenderFail(error)
                    result?.invoke(false)
                    TimeOut.getInstance().isShowCompleted=true
                }

                /**
                 * 广告关闭的回调
                 */
                override fun onAdClose() {
                    super.onAdClose()
                    result?.invoke(true)
                    TimeOut.getInstance().isShowCompleted=true
                }
            })
        }

   

2、带预加载示例:

     /**
         * 展示激励视频,带预加载
         */
        fun AdEncourageShow(mContext: Context, slotId: String, result:((Boolean)-> Unit)?) {

            Log.d("LUO","#####====加载激励视频====")
            TimeOut.getInstance().isShowCompleted=false
            if (!ApplicationHelp.isAllShowAd) {
                result?.invoke(true)
                return
            }
            LoadingUtils.ShowLoading(mContext)
            AdvManager.showRewardVideo(slotId, object : OnRewardAdListener {
//                private var isComplete: Boolean? = null
                /**
                 * 视频播放完毕的回调 Admob广告不存在该回调
                 */
                override fun onVideoComplete() {
                    super.onVideoComplete()
//                    isComplete = true
//                    result?.invoke(true)
                    Log.d("LUO","#####====加载激励视频====")
                }

                /**
                 * 视频播放失败的回调 - Mintegral GDT Admob广告不存在该回调
                 */
                override fun onAdRenderFail(error: String) {
                    super.onAdRenderFail(error)
                    Log.d("LUO","#####====onAdRenderFail===="+error)
                    LoadingUtils.HideLoading()
                    result?.invoke(false)
                    TimeOut.getInstance().isShowCompleted=true
                }

                /**
                 * 广告关闭的回调
                 */
                override fun onAdClose() {
                    super.onAdClose()
                    Log.d("LUO","#####====onAdClose====")
                    LoadingUtils.HideLoading()
                    result?.invoke(true)
                    TimeOut.getInstance().isShowCompleted=true
                }

                /**
                 * - Mintegral GDT Admob广告不存在该回调
                 */
                override fun onVideoSkip() {
                    super.onVideoSkip()
                    Log.d("LUO","#####====onVideoSkip====")
//                    isComplete = false
                }

                /**
                 * 广告的展示回调 每个广告仅回调一次
                 */
                override fun onAdShow() {
                    super.onAdShow()
                    Log.d("LUO","#####====onAdShow====")
                    LoadingUtils.HideLoading()
                }

                /**
                 * 注意Admob的激励视频不会回调该方法
                 */
                override fun onAdClick() {
                    Log.d("LUO","#####====onAdClick====")
                    super.onAdClick()
                }
            })
        }

三、附录

无预加载信息流广告实现类:InformationAdHelper 
无预加载插屏广告实现类:InterstitialAdHelper
无预加载激励视频广告实现类:RewardVideoAdHelper
无预加载开屏广告实现类:SplashAdHelper

预加载信息流广告实现类:InformationAdPreLoadHelper
预加载插屏广告实现类:InterstitialAdPreLoadHelper
预加载激励视频广告实现类:RewardVideoAdPreLoadHelper

上一篇下一篇

猜你喜欢

热点阅读