Commit 0db1da16 authored by wanglei's avatar wanglei

[商业化]优化广告逻辑

parent 2d9b4206
...@@ -30,7 +30,7 @@ class AdState<T>() { ...@@ -30,7 +30,7 @@ class AdState<T>() {
/** /**
* 用于保存引用现有页面,在此页面显示广告(因为要等待广告加载完毕) * 用于保存引用现有页面,在此页面显示广告(因为要等待广告加载完毕)
*/ */
var activityRef: WeakReference<Activity>? = null // var activityRef: WeakReference<Activity>? = null
/** /**
* 上一次的缓存成功时间 * 上一次的缓存成功时间
...@@ -49,7 +49,7 @@ class AdState<T>() { ...@@ -49,7 +49,7 @@ class AdState<T>() {
fun onAdDisplayed() { fun onAdDisplayed() {
currentAd = null currentAd = null
currentAdEvent = null currentAdEvent = null
activityRef = null // activityRef = null
adDialog?.dismiss() adDialog?.dismiss()
adDialog = null adDialog = null
...@@ -70,7 +70,7 @@ class AdState<T>() { ...@@ -70,7 +70,7 @@ class AdState<T>() {
currentAd = null currentAd = null
currentAdEvent = null currentAdEvent = null
activityRef = null // activityRef = null
} }
fun onAdLoaded(ad: T?, adEvent: AdEvent?) { fun onAdLoaded(ad: T?, adEvent: AdEvent?) {
......
package com.base.appzxhy.business.ads package com.base.appzxhy.business.ads
abstract class AdsShowCallBack { abstract class AdsShowCallBack {
var adShowed: Boolean = false var adShowed: Boolean = false
var nextCalled: Boolean = false var nextCalled: Boolean = false
//展示广告时调用
open fun show() { open fun show() {
adShowed = true adShowed = true
} }
//流程中非广告的失败时调用
open fun failed(where: Int = 0) { open fun failed(where: Int = 0) {
adShowed = false adShowed = false
if (!nextCalled) { if (!nextCalled) {
...@@ -17,6 +21,7 @@ abstract class AdsShowCallBack { ...@@ -17,6 +21,7 @@ abstract class AdsShowCallBack {
} }
} }
//流程中广告本身时调用
open fun adFailed(where: Int = 0) { open fun adFailed(where: Int = 0) {
adShowed = false adShowed = false
if (!nextCalled) { if (!nextCalled) {
...@@ -25,8 +30,8 @@ abstract class AdsShowCallBack { ...@@ -25,8 +30,8 @@ abstract class AdsShowCallBack {
} }
} }
//用户手动关闭广告时调用
open fun close(where: Int = 0) { open fun close(where: Int = 0) {
adShowed = false
if (!nextCalled) { if (!nextCalled) {
nextCalled = true nextCalled = true
next() next()
......
...@@ -149,7 +149,7 @@ object LimitUtils { ...@@ -149,7 +149,7 @@ object LimitUtils {
fun isIntervalLimited(adEvent: AdEvent?): Boolean { fun isIntervalLimited(adEvent: AdEvent?): Boolean {
val flag = ((System.currentTimeMillis() - openInterLastShowTime) / 1000).toInt() < (AdConfigBean.adsConfigBean.timeInterval) val flag = ((System.currentTimeMillis() - openInterLastShowTime) / 1000).toInt() < (AdConfigBean.adsConfigBean.timeInterval)
if (flag) { if (flag) {
adEvent?.adShowError("ad in timeInterval") adEvent?.adLimited("ad in timeInterval")
} }
return flag return flag
} }
......
...@@ -19,7 +19,6 @@ import com.google.android.gms.ads.FullScreenContentCallback ...@@ -19,7 +19,6 @@ import com.google.android.gms.ads.FullScreenContentCallback
import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.interstitial.InterstitialAd import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import java.lang.ref.WeakReference
/** /**
...@@ -45,7 +44,7 @@ class AdInterMgr { ...@@ -45,7 +44,7 @@ class AdInterMgr {
} }
val nowAdEvent = adEvent val nowAdEvent = adEvent
//currentAdEvent!=null 有缓存广告,关联reqId //currentAdEvent!=null 表示有缓存广告,关联reqId
adState.currentAdEvent?.let { nowAdEvent.reqId = it.reqId } adState.currentAdEvent?.let { nowAdEvent.reqId = it.reqId }
if (!nowAdEvent.isUnLimit) { if (!nowAdEvent.isUnLimit) {
...@@ -61,7 +60,7 @@ class AdInterMgr { ...@@ -61,7 +60,7 @@ class AdInterMgr {
val needLoad = !adState.adAvailable() val needLoad = !adState.adAvailable()
adState.activityRef = WeakReference(activity) // adState.activityRef = WeakReference(activity)
this.showCallBack = showCallBack this.showCallBack = showCallBack
if (adState.adDialog == null) { if (adState.adDialog == null) {
...@@ -70,7 +69,6 @@ class AdInterMgr { ...@@ -70,7 +69,6 @@ class AdInterMgr {
adState.adDialog?.dismiss() adState.adDialog?.dismiss()
} }
nowAdEvent.adPrepareShow() nowAdEvent.adPrepareShow()
LogEx.logDebug(adEvent.TAG, "needLoad=$needLoad") LogEx.logDebug(adEvent.TAG, "needLoad=$needLoad")
...@@ -78,30 +76,30 @@ class AdInterMgr { ...@@ -78,30 +76,30 @@ class AdInterMgr {
if (!adState.loadingAd) { if (!adState.loadingAd) {
LogEx.logDebug(adEvent.TAG, "inter adState !loadingAd") LogEx.logDebug(adEvent.TAG, "inter adState !loadingAd")
loadAd(activity, nowAdEvent) { loadAd(activity, nowAdEvent) {
showReadyAd() showReadyAd(activity)
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "inter adState is loadingAd") LogEx.logDebug(adEvent.TAG, "inter adState is loadingAd")
loadingCallBack = { loadingCallBack = {
showReadyAd() showReadyAd(activity)
} }
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "inter ad ready") LogEx.logDebug(adEvent.TAG, "inter ad ready")
showReadyAd() showReadyAd(activity)
} }
} }
private fun showReadyAd() { private fun showReadyAd(ac: Activity) {
val adEvent = (adState.currentAdEvent as AdmobEvent?) val adEvent = (adState.currentAdEvent as AdmobEvent?)
val ac = adState.activityRef?.get() // val ac = adState.activityRef?.get()
val tag = adEvent?.TAG ?: "" val tag = adEvent?.TAG ?: ""
LogEx.logDebug(tag, "showReadyAd ac=$ac currentAd=${adState.currentAd}") LogEx.logDebug(tag, "showReadyAd ac=$ac currentAd=${adState.currentAd}")
if (ac == null || ac.isFinishing || ac.isDestroyed) { if (ac.isFinishing || ac.isDestroyed || adState.currentAd == null) {
LogEx.logDebug(tag, "showReadyAd ac=null isFinishing isDestroyed") LogEx.logDebug(tag, "showReadyAd ac=null isFinishing isDestroyed")
showCallBack?.failed() showCallBack?.failed()
adState.onAdDisplayFailed() adState.onAdDisplayFailed()
...@@ -114,7 +112,6 @@ class AdInterMgr { ...@@ -114,7 +112,6 @@ class AdInterMgr {
override fun onAdShowedFullScreenContent() { override fun onAdShowedFullScreenContent() {
super.onAdShowedFullScreenContent() super.onAdShowedFullScreenContent()
val ac = adState.activityRef?.get()
adEvent?.showAd(responseInfo, ac) adEvent?.showAd(responseInfo, ac)
adState.onAdDisplayed() adState.onAdDisplayed()
...@@ -150,15 +147,13 @@ class AdInterMgr { ...@@ -150,15 +147,13 @@ class AdInterMgr {
LimitUtils.addClickNum() LimitUtils.addClickNum()
} }
} }
val activity = adState.activityRef?.get() // val activity = adState.activityRef?.get()
activity?.let { if (AdConfigBean.adsConfigBean.showCountdown) {
if (AdConfigBean.adsConfigBean.showCountdown) { createUICountdownTimer(adState.adDialog) {
createUICountdownTimer(adState.adDialog) { show(ac)
show(it)
}
} else {
show(it)
} }
} else {
show(ac)
} }
} }
} }
......
...@@ -15,7 +15,6 @@ import com.google.android.gms.ads.AdRequest ...@@ -15,7 +15,6 @@ import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.FullScreenContentCallback import com.google.android.gms.ads.FullScreenContentCallback
import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.appopen.AppOpenAd import com.google.android.gms.ads.appopen.AppOpenAd
import java.lang.ref.WeakReference
/** /**
...@@ -54,7 +53,6 @@ class AdOpenMgr { ...@@ -54,7 +53,6 @@ class AdOpenMgr {
} }
val needLoad = !adState.adAvailable() val needLoad = !adState.adAvailable()
adState.activityRef = WeakReference(activity)
this.showCallBack = showCallBack this.showCallBack = showCallBack
nowAdEvent.adPrepareShow() nowAdEvent.adPrepareShow()
...@@ -62,24 +60,24 @@ class AdOpenMgr { ...@@ -62,24 +60,24 @@ class AdOpenMgr {
if (!adState.loadingAd) { if (!adState.loadingAd) {
LogEx.logDebug(adEvent.TAG, "open adState !loadingAd") LogEx.logDebug(adEvent.TAG, "open adState !loadingAd")
loadAd(activity, adEvent) { loadAd(activity, adEvent) {
showReadyAd() showReadyAd(activity)
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "open adState is loadingAd") LogEx.logDebug(adEvent.TAG, "open adState is loadingAd")
loadingCallBack = { loadingCallBack = {
showReadyAd() showReadyAd(activity)
} }
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "open ad ready") LogEx.logDebug(adEvent.TAG, "open ad ready")
showReadyAd() showReadyAd(activity)
} }
} }
private fun showReadyAd() { private fun showReadyAd(ac: Activity) {
val ac = adState.activityRef?.get() // val ac = adState.activityRef?.get()
if (ac == null || ac.isFinishing || ac.isDestroyed) { if (ac.isFinishing || ac.isDestroyed || adState.currentAd == null) {
LogEx.logDebug(TAG, "showReadyAd ac=null isFinishing isDestroyed") LogEx.logDebug(TAG, "showReadyAd ac=null isFinishing isDestroyed")
return return
} }
...@@ -131,8 +129,7 @@ class AdOpenMgr { ...@@ -131,8 +129,7 @@ class AdOpenMgr {
LimitUtils.addClickNum() LimitUtils.addClickNum()
} }
} }
val activity = adState.activityRef?.get() show(ac)
activity?.let { show(it) }
} }
} }
...@@ -144,7 +141,7 @@ class AdOpenMgr { ...@@ -144,7 +141,7 @@ class AdOpenMgr {
if (!adEvent.isUnLimit) { if (!adEvent.isUnLimit) {
if (!LimitUtils.isAdShow(AdsType.OPEN, adEvent)) { if (!LimitUtils.isAdShow(AdsType.OPEN, adEvent)) {
this.showCallBack?.close() this.showCallBack?.failed()
this.showCallBack = null this.showCallBack = null
adState.onAdLoadFailed() adState.onAdLoadFailed()
return return
......
...@@ -13,7 +13,6 @@ import com.base.appzxhy.business.ads.AdState ...@@ -13,7 +13,6 @@ import com.base.appzxhy.business.ads.AdState
import com.base.appzxhy.business.ads.AdsShowCallBack import com.base.appzxhy.business.ads.AdsShowCallBack
import com.base.appzxhy.business.ads.AdsType import com.base.appzxhy.business.ads.AdsType
import com.base.appzxhy.business.ads.LimitUtils import com.base.appzxhy.business.ads.LimitUtils
import java.lang.ref.WeakReference
/** /**
*插屏广告加载显示管理类 *插屏广告加载显示管理类
...@@ -31,18 +30,9 @@ class MaxInsertMgr { ...@@ -31,18 +30,9 @@ class MaxInsertMgr {
) { ) {
if (activity.isFinishing || activity.isDestroyed) { if (activity.isFinishing || activity.isDestroyed) {
showCallBack?.failed(1)
return return
} }
if (showCallBack != null) {
adState.activityRef = WeakReference(activity)
this.showCallBack = showCallBack
if (adState.adDialog == null) {
adState.adDialog = activity.showAdCountDownDialog()
}
adEvent.adPrepareShow()
}
if (!adState.loadingAd) { if (!adState.loadingAd) {
if (!isUnLimit) { if (!isUnLimit) {
...@@ -57,12 +47,21 @@ class MaxInsertMgr { ...@@ -57,12 +47,21 @@ class MaxInsertMgr {
} }
if (!adAvailable() || adState.currentAd == null) { if (!adAvailable() || adState.currentAd == null) {
loadAd(activity, adEvent, isUnLimit) loadAd(activity, adEvent)
return return
} }
if (showCallBack != null) {
this.showCallBack = showCallBack
if (adState.adDialog == null) {
adState.adDialog = activity.showAdCountDownDialog()
}
adEvent.adPrepareShow()
}
if (adState.currentAd?.isReady == false) { if (adState.currentAd?.isReady == false) {
loadAd(activity, adEvent, isUnLimit) loadAd(activity, adEvent)
return return
} }
showReadyAd(adEvent) showReadyAd(adEvent)
...@@ -121,9 +120,9 @@ class MaxInsertMgr { ...@@ -121,9 +120,9 @@ class MaxInsertMgr {
fun loadAd( fun loadAd(
context: Context, context: Context,
adEvent: AdEvent, adEvent: AdEvent,
isUnLimit: Boolean = false, loadCallback: (() -> Unit)? = null
) { ) {
if (!isUnLimit) { if (!adEvent.isUnLimit) {
if (!LimitUtils.isAdShow(AdsType.INSERT, adEvent)) { if (!LimitUtils.isAdShow(AdsType.INSERT, adEvent)) {
this.showCallBack?.close(4) this.showCallBack?.close(4)
this.showCallBack = null this.showCallBack = null
...@@ -146,10 +145,7 @@ class MaxInsertMgr { ...@@ -146,10 +145,7 @@ class MaxInsertMgr {
override fun onAdLoaded(ad: MaxAd) { override fun onAdLoaded(ad: MaxAd) {
adState.onAdLoaded(null, adEvent) adState.onAdLoaded(null, adEvent)
val ac = adState.activityRef?.get() loadCallback?.invoke()
if (ac != null) {
show(ac, isUnLimit, adEvent, null)
}
(adEvent as AdMaxEvent).pullAd(ad) (adEvent as AdMaxEvent).pullAd(ad)
LimitUtils.addRequestNum() LimitUtils.addRequestNum()
......
...@@ -29,7 +29,6 @@ class MaxOpenMgr { ...@@ -29,7 +29,6 @@ class MaxOpenMgr {
if (showCallBack != null) { if (showCallBack != null) {
this.showCallBack = showCallBack this.showCallBack = showCallBack
adState.activityRef = WeakReference(activity)
adEvent.adPrepareShow() adEvent.adPrepareShow()
} }
...@@ -127,10 +126,6 @@ class MaxOpenMgr { ...@@ -127,10 +126,6 @@ class MaxOpenMgr {
adState.currentAd?.setListener(object : MaxAdListener { adState.currentAd?.setListener(object : MaxAdListener {
override fun onAdLoaded(ad: MaxAd) { override fun onAdLoaded(ad: MaxAd) {
adState.onAdLoaded(null, adEvent) adState.onAdLoaded(null, adEvent)
val ac = adState.activityRef?.get()
if (ac != null) {
show(ac, isUnLimit, adEvent, null)
}
(adEvent as AdMaxEvent).pullAd(ad) (adEvent as AdMaxEvent).pullAd(ad)
LimitUtils.addRequestNum() LimitUtils.addRequestNum()
} }
......
...@@ -184,8 +184,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding ...@@ -184,8 +184,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
val acAction = { val acAction = {
initUMP { initUMP {
LogEx.logDebug(TAG, "initUMP callback") LogEx.logDebug(TAG, "initUMP callback")
AdsMgr.showOpen(this, showCallBack = object : AdsShowCallBack() { AdsMgr.showOpen(this, showCallBack = object : AdsShowCallBack() {
override fun show() { override fun show() {
super.show()
viewModel.stopCountdown() viewModel.stopCountdown()
binding.progressBar.setProgress(100, true) binding.progressBar.setProgress(100, true)
} }
...@@ -197,7 +199,8 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding ...@@ -197,7 +199,8 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
binding.progressBar.setProgress(100, true) binding.progressBar.setProgress(100, true)
binding.root.postDelayed({ jumpNext() }, 250) binding.root.postDelayed({ jumpNext() }, 250)
} }
if (this.adShowed) { LogEx.logDebug("AdmobEvent", "inter adShowed=${adShowed}")
if (adShowed) {
action.invoke() action.invoke()
} else { } else {
LogEx.logDebug("AdmobEvent", "inter open show inter") LogEx.logDebug("AdmobEvent", "inter open show inter")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment