|
@@ -4,12 +4,14 @@ import android.app.Activity
|
|
|
import android.content.Context
|
|
|
import android.view.View
|
|
|
import android.view.ViewGroup
|
|
|
+import com.composition.android.lib.ad.AdManager
|
|
|
import com.composition.android.lib.ad.basic.*
|
|
|
import com.composition.android.lib.ad.bean.AdUnitBean
|
|
|
import com.composition.android.lib.ad.exception.AdLoadFailException
|
|
|
import com.composition.android.lib.ad.util.adLog
|
|
|
+import com.composition.android.lib.ad.util.adLogE
|
|
|
import kotlinx.coroutines.flow.firstOrNull
|
|
|
-import kotlinx.coroutines.flow.flow
|
|
|
+import kotlinx.coroutines.flow.flowOf
|
|
|
import kotlinx.coroutines.flow.onEach
|
|
|
import kotlinx.coroutines.flow.retry
|
|
|
import kotlinx.coroutines.withTimeoutOrNull
|
|
@@ -22,10 +24,10 @@ import kotlinx.coroutines.withTimeoutOrNull
|
|
|
*/
|
|
|
interface AdLoader {
|
|
|
|
|
|
- val advertisers : Advertisers
|
|
|
+ val advertisers: Advertisers
|
|
|
|
|
|
|
|
|
- suspend fun load(context: Context, adUnitBean : AdUnitBean) : AdResult
|
|
|
+ suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -34,38 +36,41 @@ interface AdLoader {
|
|
|
* 加载超时时间、重试次数
|
|
|
*
|
|
|
*/
|
|
|
- suspend fun loadByStrategy(context: Context, adUnitBean: AdUnitBean, iAdFormatRequest: IAdFormatRequest?) : AdResult{
|
|
|
- if (iAdFormatRequest == null){
|
|
|
+ suspend fun loadByStrategy(context: Context, adUnitBean: AdUnitBean, iAdFormatRequest: IAdFormatRequest?): AdResult {
|
|
|
+ if (iAdFormatRequest == null) {
|
|
|
return AdResult.Fail(adUnitBean, msg = "广告类型解析出错,请检查adType, 当前广告商:${adUnitBean.advertisersName} 不支持 ${adUnitBean.adType} 类型的广告加载")
|
|
|
}
|
|
|
return try {
|
|
|
- withTimeoutOrNull(adUnitBean.requestAdConfig.adLoadTimeOut){
|
|
|
- flow<AdResult> {
|
|
|
- emit(iAdFormatRequest.load(context, adUnitBean))
|
|
|
- }.onEach {
|
|
|
- if (it is AdResult.Fail){
|
|
|
- throw AdLoadFailException()
|
|
|
- }
|
|
|
- }.retry(adUnitBean.requestAdConfig.adLoadRetryCount.toLong()){
|
|
|
- it is AdLoadFailException
|
|
|
- }.firstOrNull()
|
|
|
- }?:AdResult.Fail(adUnitBean, AdLoadCode.FAIL, "加载失败")
|
|
|
- }catch (e : Exception){
|
|
|
- adLog(msg = e.message)
|
|
|
- AdResult.Fail(adUnitBean, AdLoadCode.FAIL, "加载失败")
|
|
|
+ withTimeoutOrNull(adUnitBean.requestAdConfig.adLoadTimeOut) {
|
|
|
+ flowOf(iAdFormatRequest.load(context, adUnitBean))
|
|
|
+ .onEach {
|
|
|
+ //这里判断如果加载失败了, 抛出加载失败异常
|
|
|
+ if (it is AdResult.Fail) {
|
|
|
+ throw AdLoadFailException()
|
|
|
+ }
|
|
|
+ }.retry(adUnitBean.requestAdConfig.adLoadRetryCount.toLong()) {
|
|
|
+ //判断如果是加载失败异常,进行重试
|
|
|
+ adLog(msg = "加载失败-进行重试")
|
|
|
+ it is AdLoadFailException
|
|
|
+ }.firstOrNull()
|
|
|
+ } ?: AdResult.Fail(adUnitBean, AdLoadCode.FAIL, "加载失败,请求结果为null")
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ adLogE(tag = AdManager.TAG, msg = "加载失败-出现异常-${e.message}")
|
|
|
+ AdResult.Fail(adUnitBean, AdLoadCode.FAIL, "加载失败-出现异常-${e.message}")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取BannerAd View
|
|
|
*/
|
|
|
- fun getBannerView(context: Context, adResult: AdResult.Success, viewHolder: BannerAdViewHolder) : BasicAdView<*>?
|
|
|
+ fun getBannerView(context: Context, adResult: AdResult.Success, viewHolder: BannerAdViewHolder): BasicAdView<*>?
|
|
|
|
|
|
/**
|
|
|
* 获取原生广告View
|
|
|
*
|
|
|
*/
|
|
|
- fun getNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder) :View?
|
|
|
+ fun getNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder): View?
|
|
|
|
|
|
/**
|
|
|
* 销毁广告
|
|
@@ -87,7 +92,7 @@ interface AdLoader {
|
|
|
* CSJ : 不需要特定的布局, 随意ViewGroup都行
|
|
|
*
|
|
|
*/
|
|
|
- fun populateNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder, advertisersContainerView : ViewGroup)
|
|
|
+ fun populateNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder, advertisersContainerView: ViewGroup)
|
|
|
|
|
|
/**
|
|
|
* 显示插屏广告
|
|
@@ -107,7 +112,7 @@ interface AdLoader {
|
|
|
/**
|
|
|
* 显示开屏广告
|
|
|
*/
|
|
|
- fun showSplashAd(activity: Activity, splashViewGroup : ViewGroup?, adResult: AdResult.Success, adListener: AdListener)
|
|
|
+ fun showSplashAd(activity: Activity, splashViewGroup: ViewGroup?, adResult: AdResult.Success, adListener: AdListener)
|
|
|
|
|
|
/**
|
|
|
* 显示全屏广告
|