天意文档
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