Browse Source

【APPLovinMax广告】1.修复插屏、激励视频加载bug

liuxiaolong 2 years ago
parent
commit
401162d3cd

+ 2 - 2
lib_ad_applovinmax/build.gradle

@@ -38,8 +38,8 @@ dependencies {
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
-    implementation 'com.applovin:applovin-sdk:11.5.5'
-    implementation "com.google.android.gms:play-services-ads-identifier:18.0.1"
+    api 'com.applovin:applovin-sdk:11.5.5'
+    api "com.google.android.gms:play-services-ads-identifier:18.0.1"
 
 
 }

+ 5 - 1
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/impl/AppLovinMaxInitialize.kt

@@ -12,11 +12,15 @@ import com.composition.android.lib.ad.util.adLogE
  * @date: 2022/11/11
  * description: AppLovinMax SDK 初始化默认实现
  */
-class AppLovinMaxInitialize : Initialize {
+class AppLovinMaxInitialize(var isCreativeDebuggerEnabled : Boolean = false, var logging : Boolean = false) : Initialize {
 
     override fun init(context: Context) {
 
         AppLovinSdk.getInstance(context).mediationProvider = "max"
+        AppLovinSdk.getInstance(context).settings.apply {
+            isCreativeDebuggerEnabled = isCreativeDebuggerEnabled
+            setVerboseLogging(logging)
+        }
         AppLovinSdk.initializeSdk(context){
             adLogE(AdManager.TAG, "AppLovinMax广告初始化完成")
         }

+ 2 - 1
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/AppLovinMaxLoader.kt

@@ -233,7 +233,8 @@ class AppLovinMaxLoader : AdLoader {
                     }
 
                     override fun onUserRewarded(ad: MaxAd?, reward: MaxReward?) {
-
+                        adLog(msg = "AppLovinMax广告-激励-下发奖励")
+                        adListener.onAdRewarded()
                     }
 
                     override fun onRewardedVideoStarted(ad: MaxAd?) {

+ 1 - 0
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxInterstitialRequestImpl.kt

@@ -58,6 +58,7 @@ class AppLovinMaxInterstitialRequestImpl : IAdFormatRequest {
                 override fun onAdDisplayFailed(ad: MaxAd?, error: MaxError?) {
                 }
             })
+            interstitialAd.loadAd()
 
         }
     }

+ 1 - 0
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxRewardRequestImpl.kt

@@ -69,6 +69,7 @@ class AppLovinMaxRewardRequestImpl : IAdFormatRequest {
                 override fun onRewardedVideoCompleted(ad: MaxAd?) {
                 }
             })
+            maxRewardedAd.loadAd()
 
         }
     }

+ 2 - 0
lib_ad_core/src/main/java/com/composition/android/lib/ad/impl/Api.kt

@@ -154,9 +154,11 @@ internal class Api {
                 }
                 val cacheAd = getCacheAd(adUnitBean)
                 if (cacheAd != null) {
+                    adLog(msg = "从缓存中获取广告")
                     emit(cacheAd)
                     continue
                 }
+                adLog(msg = "开始实时加载广告")
                 val result = getAdLoader(adUnitBean).load(context, adUnitBean)
                 emit(result)
             }

+ 28 - 23
lib_ad_core/src/main/java/com/composition/android/lib/ad/interfaces/AdLoader.kt

@@ -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)
 
     /**
      * 显示全屏广告

+ 2 - 2
lib_ad_core/src/main/java/com/composition/android/lib/ad/widget/NativeAdView.kt

@@ -109,9 +109,9 @@ class NativeAdView : LinearLayout {
         }
         when (adUnitBean?.getAdvertisers()) {
             Advertisers.Admob -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_ad_admob_native_ad_view_layout)
-            Advertisers.CSJ -> advertisersContainerView = this
+            Advertisers.CSJ, Advertisers.AppLovinMax -> advertisersContainerView = this
             Advertisers.GroMore -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_ad_gro_more_tt_native_ad_view_layout)
-            Advertisers.AppLovinMax -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_app_lovin_max_advertisers_root_view)
+//            Advertisers.AppLovinMax -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_app_lovin_max_advertisers_root_view)
             Advertisers.CUSTOM -> advertisersContainerView = this
             else -> {}
         }