Commit 2aadf2c5 authored by wanglei's avatar wanglei

[迭代]迭代广告

parent 32caa541
...@@ -3,6 +3,9 @@ package com.rgt.superr.business.ads ...@@ -3,6 +3,9 @@ package com.rgt.superr.business.ads
import com.rgt.superr.MyApplication import com.rgt.superr.MyApplication
import com.rgt.superr.business.helper.EventUtils import com.rgt.superr.business.helper.EventUtils
import com.rgt.superr.utils.LogEx import com.rgt.superr.utils.LogEx
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import org.json.JSONObject import org.json.JSONObject
import java.util.UUID import java.util.UUID
...@@ -25,6 +28,7 @@ abstract class AdEvent { ...@@ -25,6 +28,7 @@ abstract class AdEvent {
var from: String = "" var from: String = ""
var reqId = UUID.randomUUID().toString() var reqId = UUID.randomUUID().toString()
var isUnLimit: Boolean = false var isUnLimit: Boolean = false
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun adPrepareShow() { fun adPrepareShow() {
...@@ -49,8 +53,8 @@ abstract class AdEvent { ...@@ -49,8 +53,8 @@ abstract class AdEvent {
fun adShowError(reason: Any) { fun adShowError(reason: Any) {
val obj = JSONObject() val obj = JSONObject()
obj.put("ad_unit", adUnit) obj.put("ad_unit", adUnit)
obj.put("req_id", reqId)
obj.put("from", from) obj.put("from", from)
obj.put("req_id", reqId)
obj.put("reason", reason.toString()) obj.put("reason", reason.toString())
EventUtils.event("ad_show_error", ext = obj) EventUtils.event("ad_show_error", ext = obj)
LogEx.logDebug(TAG, "ad_show_error_$adUnit $obj") LogEx.logDebug(TAG, "ad_show_error_$adUnit $obj")
...@@ -59,8 +63,8 @@ abstract class AdEvent { ...@@ -59,8 +63,8 @@ abstract class AdEvent {
fun adLimited(value: String) { fun adLimited(value: String) {
val obj = JSONObject() val obj = JSONObject()
obj.put("ad_unit", adUnit) obj.put("ad_unit", adUnit)
obj.put("req_id", reqId)
obj.put("from", from) obj.put("from", from)
obj.put("req_id", reqId)
EventUtils.event("ad_limit", value, obj) EventUtils.event("ad_limit", value, obj)
LogEx.logDebug(TAG, "ad_limit_$adUnit $obj") LogEx.logDebug(TAG, "ad_limit_$adUnit $obj")
} }
......
...@@ -15,6 +15,7 @@ import com.google.android.gms.ads.AdRequest ...@@ -15,6 +15,7 @@ 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 com.rgt.superr.business.ads.AdsType.Companion.OPEN
/** /**
...@@ -27,7 +28,7 @@ class AdOpenMgr { ...@@ -27,7 +28,7 @@ class AdOpenMgr {
private var showCallBack: AdsShowCallBack? = null private var showCallBack: AdsShowCallBack? = null
//正在加载回调 //正在加载回调
private var loadingCallBack: (() -> Unit)? = null private var loadingCallBack: ((flag: Boolean) -> Unit)? = null
fun show( fun show(
activity: Activity, activity: Activity,
...@@ -38,65 +39,70 @@ class AdOpenMgr { ...@@ -38,65 +39,70 @@ class AdOpenMgr {
return return
} }
val nowAdEvent = adEvent adState.currentAdEvent?.let { adEvent.reqId = it.reqId }
adState.currentAdEvent?.let { nowAdEvent.reqId = it.reqId }
if (!nowAdEvent.isUnLimit) { if (!adEvent.isUnLimit) {
if (!LimitUtils.isAdShow(AdsType.OPEN, nowAdEvent)) { if (!LimitUtils.isAdShow(AdsType.OPEN, adEvent)) {
showCallBack?.failed() showCallBack?.failed()
return return
} }
if (LimitUtils.isIntervalLimited(nowAdEvent)) { if (LimitUtils.isIntervalOpenLimit(adEvent)) {
showCallBack?.failed() showCallBack?.failed()
return return
} }
} }
val needLoad = !adState.needLoad() val needLoad = adState.needLoad()
this.showCallBack = showCallBack this.showCallBack = showCallBack
nowAdEvent.adPrepareShow() adEvent.adPrepareShow()
if (needLoad) { if (needLoad) {
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(activity) if (it) {
showReadyAd(activity, adEvent)
} else {
showCallBack?.adFailed()
}
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "open adState is loadingAd") LogEx.logDebug(adEvent.TAG, "open adState is loadingAd")
loadingCallBack = { loadingCallBack = {
showReadyAd(activity) if (it) {
showReadyAd(activity, adEvent)
} else {
showCallBack?.adFailed()
}
} }
} }
} else { } else {
LogEx.logDebug(adEvent.TAG, "open ad ready") LogEx.logDebug(adEvent.TAG, "open ad ready")
showReadyAd(activity) showReadyAd(activity, adEvent)
} }
} }
private fun showReadyAd(ac: Activity) { private fun showReadyAd(ac: Activity, adEvent: AdEvent) {
val admobEvent = (adEvent as AdmobEvent)
// val ac = adState.activityRef?.get()
if (ac.isFinishing || ac.isDestroyed || adState.currentAd == null) { if (ac.isFinishing || ac.isDestroyed || adState.currentAd == null) {
LogEx.logDebug(TAG, "showReadyAd ac=null isFinishing isDestroyed") LogEx.logDebug(adEvent.TAG, "open showReadyAd ac=null isFinishing isDestroyed")
return return
} }
adState.currentAd?.run { adState.currentAd?.run {
val adEvent = adState.currentAdEvent as AdmobEvent?
fullScreenContentCallback = object : FullScreenContentCallback() { fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdShowedFullScreenContent() { override fun onAdShowedFullScreenContent() {
adState.onAdDisplayed(OPEN)
adEvent?.showAd(this@run.responseInfo, ac)
showCallBack?.show() showCallBack?.show()
adState.onAdDisplayed()
//计数 //计数
LimitUtils.addDisplayNum() LimitUtils.addDisplayNum()
admobEvent.showAd(this@run.responseInfo, ac)
} }
override fun onAdFailedToShowFullScreenContent(adError: AdError) { override fun onAdFailedToShowFullScreenContent(adError: AdError) {
...@@ -106,25 +112,24 @@ class AdOpenMgr { ...@@ -106,25 +112,24 @@ class AdOpenMgr {
showCallBack = null showCallBack = null
adState.onAdDisplayFailed() adState.onAdDisplayFailed()
adEvent?.adShowError(adError) admobEvent.adShowError(adError)
} }
override fun onAdDismissedFullScreenContent() { override fun onAdDismissedFullScreenContent() {
super.onAdDismissedFullScreenContent() super.onAdDismissedFullScreenContent()
adState.onAdHidden(OPEN)
showCallBack?.close() showCallBack?.close()
showCallBack = null showCallBack = null
adState.onAdHidden()
//预加载,“Timeout for show call succeed.”预加载的广告大概率, //预加载,“Timeout for show call succeed.”预加载的广告大概率,
loadAd(MyApplication.appContext, AdmobEvent("openAd", "preload")) loadAd(MyApplication.appContext, AdmobEvent("openAd", "preload"))
} }
override fun onAdClicked() { override fun onAdClicked() {
adEvent?.clickAd(this@run.responseInfo) admobEvent.clickAd(this@run.responseInfo)
//计数 //计数
LimitUtils.addClickNum() LimitUtils.addClickNum()
} }
...@@ -136,7 +141,7 @@ class AdOpenMgr { ...@@ -136,7 +141,7 @@ class AdOpenMgr {
fun loadAd( fun loadAd(
context: Context, context: Context,
adEvent: AdEvent, adEvent: AdEvent,
loadCallBack: (() -> Unit)? = null loadCallBack: ((flag: Boolean) -> Unit)? = null
) { ) {
if (!adEvent.isUnLimit) { if (!adEvent.isUnLimit) {
...@@ -149,14 +154,12 @@ class AdOpenMgr { ...@@ -149,14 +154,12 @@ class AdOpenMgr {
} }
//避免无效预加载 //避免无效预加载
if (adState.loadingAd && loadCallBack == null && loadingCallBack == null) { if (adState.loadingAd) {
//容错机制
adState.loadingAd = false
return return
} }
adState.loadingAd = true
adEvent.adPulStart() adEvent.adPulStart()
adState.loadStart(adEvent)
AppOpenAd.load( AppOpenAd.load(
context, context,
...@@ -164,23 +167,27 @@ class AdOpenMgr { ...@@ -164,23 +167,27 @@ class AdOpenMgr {
AdRequest.Builder().build(), AdRequest.Builder().build(),
object : AppOpenAd.AppOpenAdLoadCallback() { object : AppOpenAd.AppOpenAdLoadCallback() {
override fun onAdLoaded(appOpenAd: AppOpenAd) { override fun onAdLoaded(appOpenAd: AppOpenAd) {
val event = (adEvent as AdmobEvent) LogEx.logDebug(adEvent.TAG, "open onAdLoaded loadAd")
appOpenAd.onPaidEventListener = AdmobOnPaidEventListener(appOpenAd, adEvent.scope)
adState.onAdLoaded(appOpenAd, adEvent) appOpenAd.onPaidEventListener = AdmobOnPaidEventListener(appOpenAd, adEvent.scope)
adState.onAdLoaded(appOpenAd)
loadCallBack?.invoke() loadCallBack?.invoke(true)
loadingCallBack?.invoke() loadingCallBack?.invoke(true)
loadingCallBack = null loadingCallBack = null
LimitUtils.addRequestNum() LimitUtils.addRequestNum()
event.pullAd(appOpenAd.responseInfo) (adEvent as AdmobEvent).pullAd(appOpenAd.responseInfo)
} }
override fun onAdFailedToLoad(loadAdError: LoadAdError) { override fun onAdFailedToLoad(loadAdError: LoadAdError) {
showCallBack?.adFailed() LogEx.logDebug(adEvent.TAG, "open onAdFailedToLoad loadAd")
showCallBack = null
adState.onAdLoadFailed() adState.onAdLoadFailed()
loadCallBack?.invoke(false)
loadingCallBack?.invoke(false)
loadingCallBack = null
(adEvent as AdmobEvent).pullAd(loadAdError.responseInfo, loadAdError) (adEvent as AdmobEvent).pullAd(loadAdError.responseInfo, loadAdError)
} }
} }
......
...@@ -38,8 +38,6 @@ class AdmobEvent : AdEvent { ...@@ -38,8 +38,6 @@ class AdmobEvent : AdEvent {
override val TAG: String = "AdmobEvent" override val TAG: String = "AdmobEvent"
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
constructor(adUnit: String, from: String) : super() { constructor(adUnit: String, from: String) : super() {
this.adUnit = adUnit this.adUnit = adUnit
this.from = from this.from = from
......
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