소스 검색

规范广告加载日志

liuxiaolong 2 년 전
부모
커밋
992c69a32d
39개의 변경된 파일396개의 추가작업 그리고 161개의 파일을 삭제
  1. 8 0
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/activity/AdBannerActivity.kt
  2. 0 1
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/model/Datas.kt
  3. 13 2
      app/src/main/res/layout/activity_ad_banner.xml
  4. 1 0
      app/src/main/res/values/colors.xml
  5. 30 3
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/AdmobAdLoader.kt
  6. 3 2
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdMobNativeRequestImpl.kt
  7. 4 3
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobAppOpenRequestImpl.kt
  8. 3 3
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobBannerRequestImpl.kt
  9. 4 2
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobInterstitialRequestImpl.kt
  10. 3 1
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardInterstitialRequestImpl.kt
  11. 3 2
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardRequestImpl.kt
  12. 32 1
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobBannerView.kt
  13. 9 3
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobNativeAdView.kt
  14. 18 0
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/util/AdmobAdExpan.kt
  15. 7 0
      lib_ad_core/src/main/java/com/composition/android/lib/ad/basic/BasicAdView.kt
  16. 1 1
      lib_ad_core/src/main/java/com/composition/android/lib/ad/util/AdLog.kt
  17. 1 3
      lib_ad_core/src/main/java/com/composition/android/lib/ad/widget/BannerAdView.kt
  18. 0 1
      lib_ad_core/src/main/java/com/composition/android/lib/ad/widget/NativeAdView.kt
  19. 1 2
      lib_ad_core/src/main/res/values/attr.xml
  20. 31 7
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/CSJAdLoader.kt
  21. 5 3
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJAppOpenRequestImpl.kt
  22. 5 3
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJBannerRequestImpl.kt
  23. 9 15
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJInterstitialRequestImpl.kt
  24. 3 4
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeTemplateRequestImpl.kt
  25. 3 6
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJRewardRequestImpl.kt
  26. 5 5
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJBannerView.kt
  27. 9 4
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeAdView.kt
  28. 17 17
      lib_ad_gromore/build.gradle
  29. 22 22
      lib_ad_gromore/src/main/AndroidManifest.xml
  30. 43 11
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/GroMoreAdLoader.kt
  31. 7 5
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMAppOpenRequestImpl.kt
  32. 6 3
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMBannerRequestImpl.kt
  33. 7 4
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMInterstitialRequestImpl.kt
  34. 19 11
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMNativeTemplateRequestImpl.kt
  35. 6 6
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMRewardRequestImpl.kt
  36. 4 0
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/util/GMSettingConfig.kt
  37. 5 0
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/view/GMBannerView.kt
  38. 41 5
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/view/GMNativeTemplateAdView.kt
  39. 8 0
      lib_common/src/main/java/com/convenient/android/common/extension/ViewExtensions.kt

+ 8 - 0
app/src/main/java/com/convenient/android/lib/ui/sample/ad/activity/AdBannerActivity.kt

@@ -10,6 +10,7 @@ import com.composition.android.lib.ad.basic.buildBannerAdViewHolder
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.impl.NormalAdListener
 import com.composition.android.lib.ad.util.adLogE
+import com.composition.android.lib.ad.widget.BannerAdView
 import com.convenient.android.common.base.viewbinding.BaseBindingActivity
 import com.convenient.android.common.extension.setViewsClick
 import com.convenient.android.common.utils.ToastUtil
@@ -47,6 +48,13 @@ class AdBannerActivity : BaseBindingActivity<ActivityAdBannerBinding>(ActivityAd
                         binding.llAdContent.removeAllViews()
                         delay(1000)
                         loadBanner(true)
+
+                        //第二种方法, 直接添加BannerAdView, 指定广告位后自动加载并展示
+//                        val bannerAdView = BannerAdView(context = this@AdBannerActivity)
+//                        bannerAdView.setAdSlotName(Datas.BANNER)
+//                        binding.llAdContent.addView(bannerAdView)
+//                        binding.llAdContent.isVisible = true
+
                     }
                 }
             }

+ 0 - 1
app/src/main/java/com/convenient/android/lib/ui/sample/ad/model/Datas.kt

@@ -70,7 +70,6 @@ object Datas {
             AdUnitBean(APP_OPEN, Advertisers.GroMore.name, AdType.APP_OPEN.name, "102137355"),
             AdUnitBean(REWARDED_VIDEO, Advertisers.GroMore.name, AdType.REWARDED_VIDEO.name, "102137844"),
             AdUnitBean(NATIVE_TEMPLATE, Advertisers.GroMore.name, AdType.NATIVE_TEMPLATE.name, "102140510")
-
         )
 
 

+ 13 - 2
app/src/main/res/layout/activity_ad_banner.xml

@@ -40,17 +40,28 @@
         android:orientation="vertical"
         />
 
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="20dp"
+        android:background="@color/app_line_color"
+        />
+
+
     <androidx.appcompat.widget.AppCompatTextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
-        android:text="以下为自动加载广告View,先配置好AdUnitBean,这里只需要指定ad_slot_name(广告位名称)即可"
+        android:text="以下为自动加载广告View,先配置好AdUnitBean,这里只需要指定ad_slot_name(广告位名称)即可\n
+com.composition.android.lib.ad.widget.BannerAdView"
         />
 
     <com.composition.android.lib.ad.widget.BannerAdView
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:ad_slot_name="banner"
         />
 
+
+
+
 </LinearLayout>

+ 1 - 0
app/src/main/res/values/colors.xml

@@ -3,4 +3,5 @@
     <color name="black">#FF000000</color>
     <color name="white">#FFFFFFFF</color>
 
+    <color name="app_line_color">#FFC5E7FF</color>
 </resources>

+ 30 - 3
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/AdmobAdLoader.kt

@@ -20,6 +20,7 @@ import com.composition.android.ad.admob.load.request.*
 import com.composition.android.ad.admob.load.view.AdmobBannerView
 import com.composition.android.ad.admob.load.view.AdmobNativeAdView
 import com.composition.android.lib.ad.basic.*
+import com.composition.android.lib.ad.util.adLog
 
 /**
  * @classname:
@@ -48,9 +49,10 @@ class AdmobAdLoader : AdLoader {
         return loadByStrategy(context, adUnitBean, adFormatRequestImpl)
     }
 
-    override fun getBannerView(context: Context, adResult: AdResult.Success,viewHolder: BannerAdViewHolder): BasicAdView<*>? {
+    override fun getBannerView(context: Context, adResult: AdResult.Success, viewHolder: BannerAdViewHolder): BasicAdView<*>? {
         return if (adResult.adObject != null){
             AdmobBannerView(context).apply {
+                setBannerAdViewHolder(viewHolder)
                 render(adResult)
                 AdManager.instance.globalListener?.invoke(adResult.adBean)
             }
@@ -92,23 +94,29 @@ class AdmobAdLoader : AdLoader {
                 override fun onAdDismissedFullScreenContent() {
                     super.onAdDismissedFullScreenContent()
                     adListener.onAdClose()
+                    adLog(msg = "Admob广告-插屏-关闭")
                 }
 
                 override fun onAdFailedToShowFullScreenContent(p0: AdError) {
                     super.onAdFailedToShowFullScreenContent(p0)
                     adListener.onAdLoadedFail()
+                    adLog(msg = "Admob广告-插屏-展示失败")
                 }
 
                 override fun onAdShowedFullScreenContent() {
                     super.onAdShowedFullScreenContent()
+                    adLog(msg = "Admob广告-插屏-展示")
                     adListener.onAdShow(adUnitBean = success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
             }
             interstitialAd.setOnPaidEventListener {
+
             }
             interstitialAd.show(activity)
         }else{
+            adLog(msg = "Admob广告-插屏-异常\n" +
+                    "类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:InterstitialAd")
             adListener.onAdLoadedFail()
         }
     }
@@ -123,15 +131,17 @@ class AdmobAdLoader : AdLoader {
 
                 override fun onAdDismissedFullScreenContent() {
                     adListener.onAdClose()
-
+                    adLog(msg = "Admob广告-激励-关闭")
                 }
 
                 override fun onAdFailedToShowFullScreenContent(p0: AdError) {
                     super.onAdFailedToShowFullScreenContent(p0)
                     adListener.onAdLoadedFail()
+                    adLog(msg = "Admob广告-激励-展示失败")
                 }
 
                 override fun onAdShowedFullScreenContent() {
+                    adLog(msg = "Admob广告-激励-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
@@ -141,6 +151,10 @@ class AdmobAdLoader : AdLoader {
             adObj.show(activity) {
                 adListener.onAdRewarded()
             }
+        }else{
+            adLog(msg = "Admob广告-激励-异常\n" +
+                    "类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:RewardedAd")
+            adListener.onAdShowFail("类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:RewardedAd")
         }
     }
 
@@ -149,15 +163,18 @@ class AdmobAdLoader : AdLoader {
             val rewardedInterstitialAd = success.adObject as RewardedInterstitialAd
             rewardedInterstitialAd.fullScreenContentCallback = object : FullScreenContentCallback() {
                 override fun onAdDismissedFullScreenContent() {
+                    adLog(msg = "Admob广告-激励插屏-关闭")
                     adListener.onAdClose()
                 }
 
                 override fun onAdFailedToShowFullScreenContent(p0: AdError) {
                     super.onAdFailedToShowFullScreenContent(p0)
+                    adLog(msg = "Admob广告-激励插屏-展示失败")
                     adListener.onAdLoadedFail()
                 }
 
                 override fun onAdShowedFullScreenContent() {
+                    adLog(msg = "Admob广告-激励插屏-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
@@ -167,6 +184,10 @@ class AdmobAdLoader : AdLoader {
             rewardedInterstitialAd.show(activity) {
                 adListener.onAdRewarded()
             }
+        }else{
+            adLog(msg = "Admob广告-激励插屏-异常\n" +
+                    "类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:RewardedInterstitialAd")
+            adListener.onAdShowFail("类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:RewardedInterstitialAd")
         }
     }
 
@@ -192,14 +213,17 @@ class AdmobAdLoader : AdLoader {
         if (appOpenAd != null) {
             val callback: FullScreenContentCallback = object : FullScreenContentCallback() {
                 override fun onAdDismissedFullScreenContent() {
-                    adListener.onAdSkip()
+                    adLog(msg = "Admob广告-开屏-关闭")
+                    adListener.onAdClose()
                 }
 
                 override fun onAdFailedToShowFullScreenContent(adError: AdError) {
+                    adLog(msg = "Admob广告-开屏-展示异常")
                     adListener.onAdSkip()
                 }
 
                 override fun onAdShowedFullScreenContent() {
+                    adLog(msg = "Admob广告-开屏-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
@@ -208,6 +232,9 @@ class AdmobAdLoader : AdLoader {
             appOpenAd.setOnPaidEventListener {
             }
             appOpenAd.show(activity)
+        }else{
+            adLog(msg = "Admob广告-开屏-异常-广告实例为空")
+            adListener?.onAdShowFail("Admob广告-开屏-异常-广告实例为空")
         }
     }
 

+ 3 - 2
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdMobNativeRequestImpl.kt

@@ -1,6 +1,7 @@
 package com.composition.android.ad.admob.load.request
 
 import android.content.Context
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -27,7 +28,7 @@ class AdMobNativeRequestImpl : IAdFormatRequest{
         return suspendCancellableCoroutine {
             val listener: AdListener = object : AdListener() {
                 override fun onAdFailedToLoad(p0: LoadAdError) {
-                    printAdInfo(adUnitBean, p0.responseInfo)
+                    printAdFailInfo(p0.code, p0.message)
                     if (it.isActive) {
                         it.resume(AdResult.Fail(adUnitBean, msg = p0.message))
                     }
@@ -42,7 +43,7 @@ class AdMobNativeRequestImpl : IAdFormatRequest{
                                 nativeAd,
                                 adUnitBean,
                                 AdLoadCode.SUCCESS,
-                                "AdMob 原生广告加载成功"
+                                "Admob广告-原生-加载成功"
                             )
                         )
                     }

+ 4 - 3
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobAppOpenRequestImpl.kt

@@ -1,6 +1,7 @@
 package com.composition.android.ad.admob.load.request
 
 import android.content.Context
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
@@ -17,7 +18,7 @@ import kotlin.coroutines.resume
  * @classname:
  * @author: LiuXiaoLong
  * @date: 2022/9/5
- * description:
+ * description: Admob 开屏广告加载类
  */
 class AdmobAppOpenRequestImpl : IAdFormatRequest {
 
@@ -27,7 +28,7 @@ class AdmobAppOpenRequestImpl : IAdFormatRequest {
             val listener: AppOpenAd.AppOpenAdLoadCallback =
                 object : AppOpenAd.AppOpenAdLoadCallback() {
                     override fun onAdFailedToLoad(p0: LoadAdError) {
-                        adLogE(AdManager.TAG, p0.message)
+                        printAdFailInfo(p0.code, p0.message)
                         if (it.isActive) {
                             it.resume(
                                 AdResult.Fail(
@@ -47,7 +48,7 @@ class AdmobAppOpenRequestImpl : IAdFormatRequest {
                                     p0,
                                     adUnitBean,
                                     AdLoadCode.SUCCESS,
-                                    "Admob 开屏广告加载成功"
+                                    "Admob广告-开屏-加载成功"
                                 )
                             )
                         }

+ 3 - 3
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobBannerRequestImpl.kt

@@ -12,6 +12,7 @@ import com.google.android.gms.ads.AdView
 import com.google.android.gms.ads.LoadAdError
 import com.composition.android.ad.admob.impl.AdmobAdSize
 import com.composition.android.ad.admob.util.getAdSize
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.ad.admob.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
@@ -46,7 +47,7 @@ class AdmobBannerRequestImpl : IAdFormatRequest {
                                 adView,
                                 adUnitBean,
                                 AdLoadCode.SUCCESS,
-                                "AdMob横幅广告加载成功"
+                                "Admob广告-横幅-加载成功"
                             )
                         )
                     }
@@ -55,7 +56,7 @@ class AdmobBannerRequestImpl : IAdFormatRequest {
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
                     super.onAdFailedToLoad(p0)
-                    adLogE(AdManager.TAG, p0.message)
+                    printAdFailInfo(p0.code, p0.message)
                     if (it.isActive){
                         it.resume(
                             AdResult.Fail(
@@ -67,7 +68,6 @@ class AdmobBannerRequestImpl : IAdFormatRequest {
                     }
                 }
             }
-
             adView.adListener = listener
             val adRequest = com.google.android.gms.ads.AdRequest.Builder()
                 .build()

+ 4 - 2
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobInterstitialRequestImpl.kt

@@ -1,6 +1,7 @@
 package com.composition.android.ad.admob.load.request
 
 import android.content.Context
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -22,7 +23,7 @@ class AdmobInterstitialRequestImpl : IAdFormatRequest {
 
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
 
-        return suspendCancellableCoroutine<AdResult> {
+        return suspendCancellableCoroutine {
             val listener: InterstitialAdLoadCallback = object : InterstitialAdLoadCallback() {
                 override fun onAdLoaded(p0: InterstitialAd) {
                     printAdInfo(adUnitBean, p0.responseInfo)
@@ -32,13 +33,14 @@ class AdmobInterstitialRequestImpl : IAdFormatRequest {
                                 adObject = p0,
                                 adBean = adUnitBean,
                                 code = AdLoadCode.SUCCESS,
-                                msg = "AdMob 插屏广告加载成功"
+                                msg = "Admob广告-插屏-加载成功"
                             )
                         )
                     }
                 }
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
+                    printAdFailInfo(p0.code, p0.message)
                     if (it.isActive){
                         it.resume(
                             AdResult.Fail(

+ 3 - 1
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardInterstitialRequestImpl.kt

@@ -9,6 +9,7 @@ import com.google.android.gms.ads.LoadAdError
 import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd
 import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback
 import com.composition.android.ad.admob.util.getFailedCodeInfo
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.ad.admob.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
@@ -34,13 +35,14 @@ class AdmobRewardInterstitialRequestImpl : IAdFormatRequest {
                                     adBean = adUnitBean,
                                     adObject = p0,
                                     code = AdLoadCode.SUCCESS,
-                                    msg = "AdMob激励插屏加载成功"
+                                    msg = "Admob广告-激励-加载成功"
                                 )
                             )
                         }
                     }
 
                     override fun onAdFailedToLoad(p0: LoadAdError) {
+                        printAdFailInfo(p0.code, p0.message)
                         if (it.isActive) {
                             it.resume(
                                 AdResult.Fail(

+ 3 - 2
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardRequestImpl.kt

@@ -1,6 +1,7 @@
 package com.composition.android.ad.admob.load.request
 
 import android.content.Context
+import com.composition.android.ad.admob.util.printAdFailInfo
 import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -25,7 +26,7 @@ class AdmobRewardRequestImpl : IAdFormatRequest {
             val listener: RewardedAdLoadCallback = object : RewardedAdLoadCallback() {
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
-                    printAdInfo(adUnitBean, p0.responseInfo)
+                    printAdFailInfo(p0.code, p0.message)
                     if (it.isActive) {
                         it.resume(AdResult.Fail(adUnitBean, AdLoadCode.FAIL, p0.message))
                     }
@@ -37,7 +38,7 @@ class AdmobRewardRequestImpl : IAdFormatRequest {
                         it.resume(
                             AdResult.Success(
                                 p0,
-                                adUnitBean, AdLoadCode.SUCCESS, "AdMob激励广告加载成功"
+                                adUnitBean, AdLoadCode.SUCCESS, "Admob广告-激励-加载成功"
                             )
                         )
                     }

+ 32 - 1
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobBannerView.kt

@@ -2,8 +2,12 @@ package com.composition.android.ad.admob.load.view
 
 import android.annotation.SuppressLint
 import android.content.Context
+import com.composition.android.lib.ad.basic.BannerAdViewHolder
 import com.composition.android.lib.ad.basic.BasicAdView
+import com.composition.android.lib.ad.util.adLog
+import com.google.android.gms.ads.AdListener
 import com.google.android.gms.ads.AdView
+import com.google.android.gms.ads.LoadAdError
 
 /**
  * @classname:
@@ -14,8 +18,35 @@ import com.google.android.gms.ads.AdView
 @SuppressLint("ViewConstructor")
 class AdmobBannerView(context: Context?) : BasicAdView<AdView>(context) {
 
+    private var viewHolder : BannerAdViewHolder? = null
+
+    fun setBannerAdViewHolder(bannerAdViewHolder: BannerAdViewHolder){
+        this.viewHolder = bannerAdViewHolder
+    }
+
     override fun adContentView(): AdView? {
-        return adResult?.adObject as? AdView
+        val adView = adResult?.adObject as? AdView
+        adView?.adListener = object : AdListener(){
+            override fun onAdClicked() {
+                super.onAdClicked()
+                adLog(msg = "Admob广告-横幅-点击")
+                viewHolder?.adListener?.onAdClick()
+            }
+
+            override fun onAdClosed() {
+                super.onAdClosed()
+                adLog(msg = "Admob广告-横幅-关闭")
+                viewHolder?.adListener?.onAdClose()
+            }
+
+            override fun onAdOpened() {
+                super.onAdOpened()
+                adLog(msg = "Admob广告-横幅-打开")
+                adResult?.adBean?.let { viewHolder?.adListener?.onAdShow(it) }
+            }
+        }
+
+        return adView
     }
 
     override fun onResume() {

+ 9 - 3
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobNativeAdView.kt

@@ -34,7 +34,7 @@ class AdmobNativeAdView(context: Context?) : BasicAdView<NativeAdView>(context)
         if (null == adResult || nativeAdViewHolder == null) {
             return null
         }
-        return populateNativeAdView(context, success = adResult!!, nativeAdViewHolder = nativeAdViewHolder!!)
+        return populateNativeAdView(context, adResult = adResult!!, nativeAdViewHolder = nativeAdViewHolder!!)
 
     }
 
@@ -55,9 +55,15 @@ class AdmobNativeAdView(context: Context?) : BasicAdView<NativeAdView>(context)
     companion object{
 
 
-        fun populateNativeAdView(context: Context, success: AdResult.Success, nativeAdViewHolder: NativeAdViewHolder) : NativeAdView {
+        /**
+         * 填充原生广告
+         * @param context 上下文
+         * @param adResult 请求成功的广告结果
+         * @param nativeAdViewHolder 填充广告的viewHolder
+         */
+        fun populateNativeAdView(context: Context, adResult: AdResult.Success, nativeAdViewHolder: NativeAdViewHolder) : NativeAdView {
             val nativeAdView = LayoutInflater.from(context).inflate(R.layout.layout_admob_native_ad_view_root,null) as NativeAdView
-            populateNativeAdView(context, success, nativeAdViewHolder, nativeAdView)
+            populateNativeAdView(context, adResult, nativeAdViewHolder, nativeAdView)
             return nativeAdView
         }
 

+ 18 - 0
lib_ad_admob/src/main/java/com/composition/android/ad/admob/util/AdmobAdExpan.kt

@@ -28,6 +28,24 @@ internal fun getFailedCodeInfo(code: Int): String {
     }
 }
 
+
+
+internal fun printAdFailInfo(code : Int, msg : String?){
+    adLog(
+        AdManager.TAG,
+        "-------------------------------------------------------------------"
+    )
+
+    adLog(AdManager.TAG, "广告加载失败")
+    adLog(AdManager.TAG, "Code:${code}")
+    adLog(AdManager.TAG, "错误信息:${msg}")
+
+    adLog(
+        AdManager.TAG,
+        "-------------------------------------------------------------------"
+    )
+}
+
 internal fun printAdInfo(adBean: AdUnitBean, responseInfo: ResponseInfo?) {
     adLog(
         AdManager.TAG,

+ 7 - 0
lib_ad_core/src/main/java/com/composition/android/lib/ad/basic/BasicAdView.kt

@@ -3,9 +3,12 @@ package com.composition.android.lib.ad.basic
 import android.content.Context
 import android.util.AttributeSet
 import android.util.Log
+import android.view.Gravity
 import android.view.View
 import android.view.ViewGroup
+import android.widget.FrameLayout
 import android.widget.LinearLayout
+import androidx.core.view.updateLayoutParams
 import androidx.lifecycle.*
 import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.util.adLog
@@ -28,6 +31,10 @@ abstract class BasicAdView<T : View> : LinearLayout, DefaultLifecycleObserver {
 
     constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
 
+    init {
+        gravity = Gravity.CENTER
+    }
+
     /**
      * 对广告布局进行渲染
      */

+ 1 - 1
lib_ad_core/src/main/java/com/composition/android/lib/ad/util/AdLog.kt

@@ -4,7 +4,7 @@ import android.util.Log
 import com.composition.android.lib.ad.AdManager
 
 
-fun adLog(tag : String, msg : String?){
+fun adLog(tag : String = AdManager.TAG, msg : String?){
     if (AdManager.instance.logEnable){
         msg?.let {
             Log.i(tag, msg)

+ 1 - 3
lib_ad_core/src/main/java/com/composition/android/lib/ad/widget/BannerAdView.kt

@@ -1,8 +1,6 @@
 package com.composition.android.lib.ad.widget
 
-import android.app.Activity
 import android.content.Context
-import android.content.ContextWrapper
 import android.content.res.TypedArray
 import android.util.AttributeSet
 import android.widget.LinearLayout
@@ -83,7 +81,7 @@ class BannerAdView : LinearLayout{
     /**
      * 更新广告
      */
-    fun updateAd(adSlotName : String){
+    fun setAdSlotName(adSlotName : String){
         this.adSlotName = adSlotName
         loadAd()
     }

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

@@ -104,7 +104,6 @@ class NativeAdView : LinearLayout {
         when (adUnitBean?.getAdvertisers()) {
             Advertisers.Admob -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_admob_advertisers_root_view)
             Advertisers.CSJ -> adRootView = this
-            Advertisers.AppLovin-> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_app_lovin_advertisers_root_view)
             Advertisers.GroMore -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_gro_more_advertisers_root_view)
             Advertisers.AppLovinMax -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_app_lovin_max_advertisers_root_view)
             Advertisers.CUSTOM -> attachedAdvertisersNativeAdViewToRoot(typedArray, R.styleable.NativeAdView_native_custom_advertisers_root_view)

+ 1 - 2
lib_ad_core/src/main/res/values/attr.xml

@@ -18,10 +18,9 @@
         <!-- 这里指定广告商提供的原生广告根节点view, 各个广告库中已经写了默认的-->
         <!-- lib_ad_admob/res/layout/layout_admob_native_ad_view_root -->
 
-        <attr name="native_csj_advertisers_root_view" format="reference"/>
         <attr name="native_admob_advertisers_root_view" format="reference"/>
-        <attr name="native_app_lovin_advertisers_root_view" format="reference"/>
         <attr name="native_gro_more_advertisers_root_view" format="reference"/>
+
         <attr name="native_app_lovin_max_advertisers_root_view" format="reference"/>
         <attr name="native_custom_advertisers_root_view" format="reference"/>
         <attr name="native_ad_slot_name" format="string"/>

+ 31 - 7
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/CSJAdLoader.kt

@@ -8,12 +8,13 @@ import android.view.ViewGroup
 import com.bytedance.sdk.openadsdk.*
 import com.composition.android.ad.csj.load.request.*
 import com.composition.android.ad.csj.load.view.CSJBannerView
-import com.composition.android.ad.csj.load.view.CSJNativeAdView
+import com.composition.android.ad.csj.load.view.CSJNativeTemplateAdView
 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.interfaces.AdListener
 import com.composition.android.lib.ad.interfaces.AdLoader
+import com.composition.android.lib.ad.util.adLog
 
 /**
  * @classname:
@@ -55,7 +56,7 @@ class CSJAdLoader : AdLoader {
     override fun getNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder): View? {
         return if (adResult.adObject != null) {
             AdManager.instance.globalListener?.invoke(adResult.adBean)
-            CSJNativeAdView(context).apply {
+            CSJNativeTemplateAdView(context).apply {
                 setViewHolder(viewHolder)
                 render(adResult)
             }
@@ -66,7 +67,7 @@ class CSJAdLoader : AdLoader {
 
     override fun populateNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder, adRootView: View) {
         AdManager.instance.globalListener?.invoke(adResult.adBean)
-        CSJNativeAdView.populateNativeAdView(context, adResult, viewHolder, adRootView)
+        CSJNativeTemplateAdView.populateNativeAdView(context, adResult, viewHolder, adRootView)
     }
 
     override fun showInterstitialAd(activity: Activity, success: AdResult.Success, adListener: AdListener) {
@@ -74,15 +75,18 @@ class CSJAdLoader : AdLoader {
             val ttFullScreenVideoAd = success.adObject as TTFullScreenVideoAd
             ttFullScreenVideoAd.setFullScreenVideoAdInteractionListener(object : TTFullScreenVideoAd.FullScreenVideoAdInteractionListener {
                 override fun onAdShow() {
+                    adLog(msg = "穿山甲广告-插屏-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
 
                 override fun onAdVideoBarClick() {
+                    adLog(msg = "穿山甲广告-插屏-点击")
                     adListener.onAdClick()
                 }
 
                 override fun onAdClose() {
+                    adLog(msg = "穿山甲广告-插屏-关闭")
                     adListener.onAdClose()
                     success.adObject = null
                 }
@@ -92,13 +96,16 @@ class CSJAdLoader : AdLoader {
                 }
 
                 override fun onSkippedVideo() {
+                    adLog(msg = "穿山甲广告-插屏-视频跳过")
                     adListener.onAdSkip()
                 }
 
             })
             ttFullScreenVideoAd.showFullScreenVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, null)
         } else {
-            adListener.onAdShowFail("adObject类型错误,当前为:${success.adObject?.javaClass?.simpleName}, 应该为:TTNativeExpressAd")
+            adLog(msg = "穿山甲广告-插屏-错误\n" +
+                    "类型错误,当前为:${success.adObject?.javaClass?.simpleName}, 应该为:TTNativeExpressAd")
+            adListener.onAdShowFail("类型错误,当前为:${success.adObject?.javaClass?.simpleName}, 应该为:TTNativeExpressAd")
         }
     }
 
@@ -110,15 +117,18 @@ class CSJAdLoader : AdLoader {
 
             ttRewardVideoAd.setRewardAdInteractionListener(object : TTRewardVideoAd.RewardAdInteractionListener {
                 override fun onAdShow() {
+                    adLog(msg = "穿山甲广告-激励视频-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
 
                 override fun onAdVideoBarClick() {
+                    adLog(msg = "穿山甲广告-激励视频-点击")
 
                 }
 
                 override fun onAdClose() {
+                    adLog(msg = "穿山甲广告-激励视频-关闭")
                     adListener.onAdClose()
                 }
 
@@ -127,9 +137,11 @@ class CSJAdLoader : AdLoader {
                 }
 
                 override fun onVideoError() {
+                    adLog(msg = "穿山甲广告-激励视频-视频异常")
                 }
 
                 override fun onRewardVerify(p0: Boolean, p1: Int, p2: String?, p3: Int, p4: String?) {
+                    adLog(msg = "穿山甲广告-激励视频-获取奖励")
                     adListener.onAdRewarded()
                 }
 
@@ -138,6 +150,7 @@ class CSJAdLoader : AdLoader {
                 }
 
                 override fun onSkippedVideo() {
+                    adLog(msg = "穿山甲广告-激励视频-视频跳过")
                     adListener.onAdSkip()
                 }
 
@@ -146,13 +159,17 @@ class CSJAdLoader : AdLoader {
             ttRewardVideoAd.showRewardVideoAd(activity)
 
         } else {
-            adListener.onAdShowFail("穿山甲激励广告展示失败,类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
+            adLog(msg = "穿山甲广告-激励视频-异常\n" +
+                    "类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
+
+            adListener.onAdShowFail("类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
         }
 
 
     }
 
     override fun showRewardedInterstitialAd(activity: Activity, success: AdResult.Success, adListener: AdListener) {
+        adLog(msg = "穿山甲广告-激励插屏-不支持的广告类型")
         adListener.onAdShowFail("穿山甲广告不支持激励插屏广告,请使用激励视频广告")
     }
 
@@ -161,26 +178,32 @@ class CSJAdLoader : AdLoader {
             val ttSplashAd = success.adObject as TTSplashAd
             ttSplashAd.setSplashInteractionListener(object : TTSplashAd.AdInteractionListener {
                 override fun onAdClicked(p0: View?, p1: Int) {
+                    adLog(msg = "穿山甲广告-开屏-点击")
                     adListener.onAdClick()
                 }
 
                 override fun onAdShow(p0: View?, p1: Int) {
+                    adLog(msg = "穿山甲广告-开屏-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
 
                 override fun onAdSkip() {
+                    adLog(msg = "穿山甲广告-开屏-跳过")
                     adListener.onAdSkip()
                 }
 
                 override fun onAdTimeOver() {
+                    adLog(msg = "穿山甲广告-开屏-超时")
                     adListener.onTimeOver()
                 }
             })
             splashViewGroup?.removeAllViews()
             splashViewGroup?.addView(ttSplashAd.splashView)
         } else {
-            adListener.onAdShowFail("穿山甲激励广告展示失败,类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
+            adLog(msg = "穿山甲广告-开屏-异常\n" +
+                    "类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
+            adListener.onAdShowFail("类型错误,当前类型为:${success.adObject?.javaClass?.simpleName}, 应为:TTRewardVideoAd")
         }
     }
 
@@ -189,7 +212,8 @@ class CSJAdLoader : AdLoader {
             AdType.INTERSTITIAL -> showInterstitialAd(activity, success, adListener)
             AdType.REWARDED_VIDEO -> showRewardedAd(activity, success, adListener)
             else -> {
-                adListener.onAdShowFail("不支持的广告类型:${success.adBean.adType}")
+                adLog(msg = "穿山甲广告-全屏-不支持的广告类型:${success.adBean.adType}")
+                adListener.onAdShowFail("穿山甲广告-全屏-不支持的广告类型:${success.adBean.adType}")
             }
         }
 

+ 5 - 3
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJAppOpenRequestImpl.kt

@@ -7,6 +7,7 @@ import com.composition.android.ad.csj.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import com.convenient.android.common.extension.getScreenHeight
 import com.convenient.android.common.extension.getScreenHeightDp
 import com.convenient.android.common.extension.getScreenWidth
@@ -46,20 +47,21 @@ class CSJAppOpenRequestImpl : IAdFormatRequest {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
                         if (it.isActive){
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:"穿山甲开屏广告加载失败"))
+                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:"穿山甲广告-开屏-加载失败"))
                         }
                     }
 
                     override fun onTimeout() {
+                        adLog(msg = "穿山甲广告-开屏-加载超时")
                         if (it.isActive){
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = "穿山甲开屏广告加载失败,请求超时"))
+                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = "穿山甲广告-开屏-加载失败,请求超时"))
                         }
                     }
 
                     override fun onSplashAdLoad(p0: TTSplashAd?) {
                         printAdInfo(adUnitBean)
                         if (it.isActive){
-                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲开屏广告成功"))
+                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-开屏-加载成功"))
                         }
                     }
                 })

+ 5 - 3
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJBannerRequestImpl.kt

@@ -8,6 +8,7 @@ import com.composition.android.ad.csj.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
 
@@ -37,7 +38,7 @@ class CSJBannerRequestImpl : IAdFormatRequest {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
                         if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲横幅广告加载失败"))
+                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-横幅-加载失败"))
                         }
                     }
 
@@ -45,9 +46,10 @@ class CSJBannerRequestImpl : IAdFormatRequest {
                         printAdInfo(adUnitBean)
                         if (it.isActive) {
                             if (p0.isNullOrEmpty().not()) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲横幅广告加载成功"))
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-横幅-加载成功"))
                             } else {
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲横幅广告加载失败, adList为空"))
+                                adLog(msg = "穿山甲广告-横幅-返回的广告实例为空")
+                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告-横幅-加载失败, 返回的广告实例为空"))
                             }
                         }
                     }

+ 9 - 15
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJInterstitialRequestImpl.kt

@@ -7,6 +7,7 @@ import com.composition.android.ad.csj.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
 
@@ -30,23 +31,15 @@ class CSJInterstitialRequestImpl : IAdFormatRequest {
                 .build()
 
             TTAdSdk.getAdManager().createAdNative(context)
-                .loadFullScreenVideoAd(adSlot, object : TTAdNative.FullScreenVideoAdListener{
+                .loadFullScreenVideoAd(adSlot, object : TTAdNative.FullScreenVideoAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
                         if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1?:"穿山甲模板插屏广告加载失败,code:${p0}"))
+                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-模板插屏-加载失败"))
                         }
                     }
 
                     override fun onFullScreenVideoAdLoad(p0: TTFullScreenVideoAd?) {
-                        printAdInfo(adUnitBean)
-                        if (it.isActive){
-                            if (p0 != null){
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲模板插屏广告加载成功"))
-                            }else{
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲模板插屏广告加载失败,adList为空"))
-                            }
-                        }
                     }
 
                     override fun onFullScreenVideoCached() {
@@ -54,11 +47,12 @@ class CSJInterstitialRequestImpl : IAdFormatRequest {
 
                     override fun onFullScreenVideoCached(p0: TTFullScreenVideoAd?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive){
-                            if (p0 != null){
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲模板插屏广告加载成功"))
-                            }else{
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲模板插屏广告加载失败,adList为空"))
+                        if (it.isActive) {
+                            if (p0 != null) {
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-模板插屏-加载成功"))
+                            } else {
+                                adLog(msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空")
+                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空"))
                             }
                         }
                     }

+ 3 - 4
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeTemplateRequestImpl.kt

@@ -36,7 +36,7 @@ class CSJNativeTemplateRequestImpl : IAdFormatRequest {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
                         if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲原生广告加载失败"))
+                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-原生模板-加载失败"))
                         }
                     }
 
@@ -44,14 +44,13 @@ class CSJNativeTemplateRequestImpl : IAdFormatRequest {
                         printAdInfo(adUnitBean)
                         if (it.isActive) {
                             if (p0.isNullOrEmpty().not()) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲原生广告加载成功"))
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-原生模板-加载成功"))
                             } else {
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲原生广告加载失败, adList为空"))
+                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告原生模板-加载失败, SDK返回的广告实例为空"))
                             }
                         }
                     }
                 })
-
         }
     }
 }

+ 3 - 6
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJRewardRequestImpl.kt

@@ -32,24 +32,21 @@ class CSJRewardRequestImpl : IAdFormatRequest {
                     override fun onError(code: Int, p1: String?) {
                         printAdFailInfo(code, p1)
                         if (it.isActive) {
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:""))
+                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:"穿山甲广告-激励视频-加载失败"))
                         }
                     }
 
                     override fun onRewardVideoAdLoad(p0: TTRewardVideoAd?) {
-                        printAdInfo(adUnitBean)
-                        if (it.isActive){
-                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告加载成功"))
-                        }
                     }
 
                     override fun onRewardVideoCached() {
+
                     }
 
                     override fun onRewardVideoCached(p0: TTRewardVideoAd?) {
                         printAdInfo(adUnitBean)
                         if (it.isActive){
-                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告缓存加载成功"))
+                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-激励视频-缓存加载成功"))
                         }
                     }
                 })

+ 5 - 5
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJBannerView.kt

@@ -25,22 +25,22 @@ class CSJBannerView(context: Context?,var viewHolder: BannerAdViewHolder) : Basi
         adObj.setExpressInteractionListener(object : TTNativeExpressAd.ExpressAdInteractionListener{
             override fun onAdClicked(p0: View?, p1: Int) {
                 viewHolder.adListener?.onAdClick()
-                adLog(AdManager.TAG, "穿山甲横幅广告点击")
+                adLog(AdManager.TAG, "穿山甲广告-横幅-点击")
             }
 
             override fun onAdShow(p0: View?, p1: Int) {
                 adResult?.adBean?.let { viewHolder.adListener?.onAdShow(it) }
-                adLog(AdManager.TAG, "穿山甲横幅广告展示")
+                adLog(AdManager.TAG, "穿山甲广告-横幅-展示")
 
             }
 
             override fun onRenderFail(p0: View?, p1: String?, p2: Int) {
                 viewHolder.adListener?.onAdShowFail("穿山甲广告渲染失败")
-                adLog(AdManager.TAG, "穿山甲横幅广告渲染失败")
+                adLog(AdManager.TAG, "穿山甲广告-横幅-渲染失败")
             }
 
             override fun onRenderSuccess(p0: View?, p1: Float, p2: Float) {
-                adLog(AdManager.TAG, "穿山甲广告渲染成功width:${p1}, height:${p2}")
+                adLog(AdManager.TAG, "穿山甲广告-横幅-渲染成功 width:${p1}, height:${p2}")
             }
         })
         viewHolder.activity?.let {
@@ -52,7 +52,7 @@ class CSJBannerView(context: Context?,var viewHolder: BannerAdViewHolder) : Basi
                 override fun onSelected(p0: Int, p1: String?, p2: Boolean) {
                     viewHolder.adListener?.onAdDisLike()
                     this@CSJBannerView.isVisible = false
-                    adLog(AdManager.TAG, "点击了穿山甲横幅广告不喜欢按钮,隐藏广告")
+                    adLog(AdManager.TAG, "穿山甲广告-横幅-点击不喜欢按钮")
 
                 }
 

+ 9 - 4
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeAdView.kt

@@ -8,6 +8,7 @@ import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.basic.BasicAdView
 import com.composition.android.lib.ad.basic.NativeAdViewHolder
+import com.composition.android.lib.ad.util.adLog
 import com.composition.android.lib.ad.util.adLogE
 import com.convenient.android.common.extension.getScreenWidth
 
@@ -15,9 +16,9 @@ import com.convenient.android.common.extension.getScreenWidth
  * @classname:
  * @author: LiuXiaoLong
  * @date: 2022/9/13
- * description:
+ * description: 穿山甲原生模板广告View
  */
-class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
+class CSJNativeTemplateAdView(context: Context?) : BasicAdView<View>(context) {
 
     private var viewHolder: NativeAdViewHolder? = null
 
@@ -26,7 +27,6 @@ class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
     }
 
     override fun adContentView(): View? {
-
         if (adResult == null || viewHolder == null) {
             return null
         }
@@ -58,6 +58,7 @@ class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
                     }
 
                     override fun onSelected(p0: Int, p1: String?, p2: Boolean) {
+                        adLog(msg = "穿山甲广告-原生模板-点击不喜欢按钮")
                         viewHolder.adListener?.onAdDisLike()
                     }
 
@@ -69,20 +70,23 @@ class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
 
             ttNativeExpressAd.setExpressInteractionListener(object : TTNativeExpressAd.AdInteractionListener {
                 override fun onAdClicked(p0: View?, p1: Int) {
+                    adLog(msg = "穿山甲广告-原生模板-点击广告")
                     viewHolder.adListener?.onAdClick()
                 }
 
                 override fun onAdShow(p0: View?, p1: Int) {
+                    adLog(msg = "穿山甲广告-原生模板-广告展示")
                     viewHolder.adListener?.onAdShow(adResult.adBean)
 
                 }
 
                 override fun onRenderFail(p0: View?, p1: String?, p2: Int) {
+                    adLog(AdManager.TAG, "穿山甲广告-原生模板-渲染失败")
                     viewHolder.adListener?.onAdShowFail("穿山甲原生模板广告渲染失败")
                 }
 
                 override fun onRenderSuccess(p0: View?, width: Float, height: Float) {
-                    adLogE(AdManager.TAG, "穿山甲原生广告渲染成功width:${width},height:${height}")
+                    adLog(AdManager.TAG, "穿山甲广告-原生模板-渲染成功 width:${width},height:${height}")
                     (adRootView as? ViewGroup)?.let {
                         val sWidth = context.getScreenWidth()
                         val sHeight = (sWidth * height / width).toInt()
@@ -92,6 +96,7 @@ class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
                 }
 
                 override fun onAdDismiss() {
+                    adLog(msg = "穿山甲广告-原生模板-广告关闭")
                     viewHolder.adListener?.onAdClose()
                 }
             })

+ 17 - 17
lib_ad_gromore/build.gradle

@@ -34,8 +34,8 @@ dependencies {
     implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
 
     implementation project(':lib_ad_core')
-    api "com.gromore.cn:gromore-sdk:3.6.0.2"
-    implementation "com.gromore.cn:pangle-adapter:4.7.1.2.0"
+    api "com.gromore.cn:gromore-sdk:3.7.0.1"
+    implementation "com.gromore.cn:pangle-adapter:4.8.0.8.0"
 
     implementation 'androidx.core:core-ktx:1.8.0'
     implementation 'androidx.appcompat:appcompat:1.5.1'
@@ -46,19 +46,19 @@ dependencies {
 
 
     //mintegral
-    implementation("com.mbridge.msdk.support:videojs:16.1.97")
-    implementation("com.mbridge.msdk.support:mbjscommon:16.1.97")
-    implementation("com.mbridge.msdk.support:playercommon:16.1.97")
-    implementation("com.mbridge.msdk.support:reward:16.1.97")
-    implementation("com.mbridge.msdk.support:videocommon:16.1.97")
-    implementation("com.mbridge.msdk.support:chinasame:16.1.97")
-    implementation("com.mbridge.msdk.support:interstitialvideo:16.1.97")
-    implementation("com.mbridge.msdk.support:mbnative:16.1.97")
-    implementation("com.mbridge.msdk.support:nativeex:16.1.97")
-    implementation("com.mbridge.msdk.support:mbnativeadvanced:16.1.97")
-    implementation("com.mbridge.msdk.support:interstitial:16.1.97")
-    implementation("com.mbridge.msdk.support:mbbanner:16.1.97")
-    implementation("com.mbridge.msdk.support:mbsplash:16.1.97")
-    implementation("com.mbridge.msdk.support:mbbid:16.1.97")
-    implementation("com.mbridge.msdk.support:newinterstitial:16.1.97")
+    implementation("com.mbridge.msdk.support:videojs:16.2.27")
+    implementation("com.mbridge.msdk.support:mbjscommon:16.2.27")
+    implementation("com.mbridge.msdk.support:playercommon:16.2.27")
+    implementation("com.mbridge.msdk.support:reward:16.2.27")
+    implementation("com.mbridge.msdk.support:videocommon:16.2.27")
+    implementation("com.mbridge.msdk.support:chinasame:16.2.27")
+    implementation("com.mbridge.msdk.support:interstitialvideo:16.2.27")
+    implementation("com.mbridge.msdk.support:mbnative:16.2.27")
+    implementation("com.mbridge.msdk.support:nativeex:16.2.27")
+    implementation("com.mbridge.msdk.support:mbnativeadvanced:16.2.27")
+    implementation("com.mbridge.msdk.support:interstitial:16.2.27")
+    implementation("com.mbridge.msdk.support:mbbanner:16.2.27")
+    implementation("com.mbridge.msdk.support:mbsplash:16.2.27")
+    implementation("com.mbridge.msdk.support:mbbid:16.2.27")
+    implementation("com.mbridge.msdk.support:newinterstitial:16.2.27")
 }

+ 22 - 22
lib_ad_gromore/src/main/AndroidManifest.xml

@@ -26,28 +26,28 @@
     <application
        >
 
-        <activity
-            android:name="com.baidu.mobads.sdk.api.AppActivity"
-            android:configChanges="screenSize|keyboard|keyboardHidden|orientation"
-            android:theme="@android:style/Theme.NoTitleBar"/>
-        <!-- 声明打开显示激励视频/全屏视频的Activity-->
-        <activity
-            android:name="com.baidu.mobads.sdk.api.MobRewardVideoActivity"
-            android:configChanges="screenSize|orientation|keyboardHidden"
-            android:launchMode="singleTask"
-            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
+<!--        <activity-->
+<!--            android:name="com.baidu.mobads.sdk.api.AppActivity"-->
+<!--            android:configChanges="screenSize|keyboard|keyboardHidden|orientation"-->
+<!--            android:theme="@android:style/Theme.NoTitleBar"/>-->
+<!--        &lt;!&ndash; 声明打开显示激励视频/全屏视频的Activity&ndash;&gt;-->
+<!--        <activity-->
+<!--            android:name="com.baidu.mobads.sdk.api.MobRewardVideoActivity"-->
+<!--            android:configChanges="screenSize|orientation|keyboardHidden"-->
+<!--            android:launchMode="singleTask"-->
+<!--            android:theme="@android:style/Theme.Translucent.NoTitleBar" />-->
 
-        <!-- 如果targetSdkVersion设置值>=24,则强烈建议添加以下provider,否则会影响app变现 -->
-        <!-- android:authorities="${packageName}.bd.provider" authorities中${packageName}部分必须替换成app自己的包名 -->
-        <!-- 原来的FileProvider在新版本中改为BdFileProvider,继承自v4的FileProvider,需要在应用内引用support-v4包 -->
-        <provider
-            android:name="com.baidu.mobads.sdk.api.BdFileProvider"
-            android:authorities="${applicationId}.bd.provider"
-            android:exported="false"
-            android:grantUriPermissions="true">
-            <meta-data
-                android:name="android.support.FILE_PROVIDER_PATHS"
-                android:resource="@xml/bd_file_paths" />
-        </provider>
+<!--        &lt;!&ndash; 如果targetSdkVersion设置值>=24,则强烈建议添加以下provider,否则会影响app变现 &ndash;&gt;-->
+<!--        &lt;!&ndash; android:authorities="${packageName}.bd.provider" authorities中${packageName}部分必须替换成app自己的包名 &ndash;&gt;-->
+<!--        &lt;!&ndash; 原来的FileProvider在新版本中改为BdFileProvider,继承自v4的FileProvider,需要在应用内引用support-v4包 &ndash;&gt;-->
+<!--        <provider-->
+<!--            android:name="com.baidu.mobads.sdk.api.BdFileProvider"-->
+<!--            android:authorities="${applicationId}.bd.provider"-->
+<!--            android:exported="false"-->
+<!--            android:grantUriPermissions="true">-->
+<!--            <meta-data-->
+<!--                android:name="android.support.FILE_PROVIDER_PATHS"-->
+<!--                android:resource="@xml/bd_file_paths" />-->
+<!--        </provider>-->
     </application>
 </manifest>

+ 43 - 11
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/GroMoreAdLoader.kt

@@ -21,6 +21,7 @@ import com.composition.android.lib.ad.basic.*
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.AdListener
 import com.composition.android.lib.ad.interfaces.AdLoader
+import com.composition.android.lib.ad.util.adLog
 import com.composition.android.lib.ad.util.adLogE
 
 /**
@@ -31,6 +32,10 @@ import com.composition.android.lib.ad.util.adLogE
  */
 class GroMoreAdLoader : AdLoader {
 
+    /**
+     * 加载广告,根据广告类型加载对应格式广告
+     * @param adUnitBean 广告配置数据类
+     */
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
         val adRequest = when (adUnitBean.getAdType()) {
             AdType.BANNER -> GMBannerRequestImpl()
@@ -41,7 +46,6 @@ class GroMoreAdLoader : AdLoader {
             else -> null
         }
         return loadByStrategy(context, adUnitBean, adRequest)
-
     }
 
     override fun getBannerView(context: Context, adResult: AdResult.Success, viewHolder: BannerAdViewHolder): BasicAdView<*>? {
@@ -68,12 +72,14 @@ class GroMoreAdLoader : AdLoader {
         }
     }
 
-
+    /**
+     * 填充原生广告
+     */
     override fun populateNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder, adRootView: View) {
         if (adRootView is TTNativeAdView) {
             GMNativeTemplateAdView.populateNativeAdView(context, adResult, viewHolder, adRootView)
         } else {
-            adLogE(AdManager.TAG, "GroMore原生模板广告填充失败, adRootView错误,当前类型为${adRootView.javaClass.simpleName},需要为${TTNativeAdView::class.java.simpleName}")
+            adLogE(AdManager.TAG, "GroMore广告-原生模板-填充失败, adRootView错误,当前类型为${adRootView.javaClass.simpleName},需要为${TTNativeAdView::class.java.simpleName}")
         }
     }
 
@@ -82,19 +88,23 @@ class GroMoreAdLoader : AdLoader {
             val mInterstitialFullAd = success.adObject as GMInterstitialFullAd
             mInterstitialFullAd.setAdInterstitialFullListener(object : GMInterstitialFullAdListener {
                 override fun onInterstitialFullShow() {
+                    adLog(msg = "GorMore广告-插屏-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
 
                 override fun onInterstitialFullShowFail(p0: AdError) {
-                    adListener.onAdShowFail(p0.message)
+                    adLog(msg = "GorMore广告-插屏-展示失败")
+                    adListener.onAdShowFail("GorMore广告-插屏-展示失败\n${p0.message}")
                 }
 
                 override fun onInterstitialFullClick() {
+                    adLog(msg = "GorMore广告-插屏-点击")
                     adListener.onAdClick()
                 }
 
                 override fun onInterstitialFullClosed() {
+                    adLog(msg = "GorMore广告-插屏-关闭")
                     adListener.onAdClose()
                 }
 
@@ -105,6 +115,8 @@ class GroMoreAdLoader : AdLoader {
                 }
 
                 override fun onSkippedVideo() {
+                    adLog(msg = "GorMore广告-插屏-跳过")
+                    adListener.onAdSkip()
                 }
 
                 override fun onAdOpened() {
@@ -114,6 +126,7 @@ class GroMoreAdLoader : AdLoader {
                 }
 
                 override fun onRewardVerify(p0: RewardItem) {
+                    adLog(msg = "GorMore广告-插屏-获取奖励")
                     adListener.onAdRewarded()
                 }
 
@@ -121,7 +134,8 @@ class GroMoreAdLoader : AdLoader {
             mInterstitialFullAd.showAd(activity)
 
         } else {
-            adListener.onAdShowFail("adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
+            adLog(msg = "GorMore广告-插屏-展示失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
+            adListener.onAdShowFail("GorMore广告-插屏-加载失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
         }
     }
 
@@ -130,19 +144,23 @@ class GroMoreAdLoader : AdLoader {
             val gmRewardAd = success.adObject as GMRewardAd
             gmRewardAd.setRewardAdListener(object : GMRewardedAdListener {
                 override fun onRewardedAdShow() {
+                    adLog(msg = "GroMore广告-激励视频-展示")
                     adListener.onAdShow(success.adBean)
                     AdManager.instance.globalListener?.invoke(success.adBean)
                 }
 
                 override fun onRewardedAdShowFail(p0: AdError) {
-                    adListener.onAdShowFail(p0.message)
+                    adLog(msg = "GroMore广告-激励视频-展示失败\n${p0.message}")
+                    adListener.onAdShowFail("GroMore广告-激励视频-展示失败\n${p0.message}")
                 }
 
                 override fun onRewardClick() {
+                    adLog(msg = "GroMore广告-激励视频-点击")
                     adListener.onAdClick()
                 }
 
                 override fun onRewardedAdClosed() {
+                    adLog(msg = "GroMore广告-激励视频-关闭")
                     adListener.onAdClose()
                 }
 
@@ -153,26 +171,31 @@ class GroMoreAdLoader : AdLoader {
                 }
 
                 override fun onRewardVerify(p0: RewardItem) {
+                    adLog(msg = "GroMore广告-激励视频-获取奖励")
                     adListener.onAdRewarded()
                 }
 
                 override fun onSkippedVideo() {
+                    adLog(msg = "GroMore广告-激励视频-跳过")
+                    adListener.onAdSkip()
                 }
             })
 
             if (gmRewardAd.isReady) {
                 gmRewardAd.showRewardAd(activity)
             } else {
-                adListener.onAdShowFail("GroMore激励视频对象还未准备完成,显示失败")
+                adListener.onAdShowFail("GroMore广告-激励视频-实例还未准备完成,显示失败")
             }
         } else {
-            adListener.onAdShowFail("adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
+            adLog(msg = "GorMore广告-激励视频-展示失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
+            adListener.onAdShowFail("GorMore广告-激励视频-加载失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
         }
 
     }
 
     override fun showRewardedInterstitialAd(activity: Activity, success: AdResult.Success, adListener: AdListener) {
-        adListener.onAdShowFail("GroMore不支持激励插屏广告")
+        adLog(msg = "GorMore广告-激励插屏-展示失败:不支持激励插屏广告")
+        adListener.onAdShowFail("GorMore广告-激励插屏-展示失败:不支持激励插屏广告")
     }
 
     override fun showSplashAd(activity: Activity, splashViewGroup: ViewGroup?, success: AdResult.Success, adListener: AdListener) {
@@ -181,28 +204,36 @@ class GroMoreAdLoader : AdLoader {
             if (gmAppOpenAd.isReady) {
                 gmAppOpenAd.setAdSplashListener(object : GMSplashAdListener {
                     override fun onAdClicked() {
+                        adLog(msg = "GroMore广告-开屏-点击")
                         adListener.onAdClick()
                     }
 
                     override fun onAdShow() {
+                        adLog(msg = "GroMore广告-开屏-展示")
                         adListener.onAdShow(success.adBean)
                         AdManager.instance.globalListener?.invoke(success.adBean)
                     }
 
                     override fun onAdShowFail(p0: AdError) {
-                        adListener.onAdShowFail(p0.message)
+                        adLog(msg = "GroMore广告-开屏-展示失败\n${p0.message}")
+                        adListener.onAdShowFail("GroMore广告-开屏-展示失败\n${p0.message}")
                     }
 
                     override fun onAdSkip() {
+                        adLog(msg = "GroMore广告-开屏-跳过")
                         adListener.onAdSkip()
                     }
 
                     override fun onAdDismiss() {
+                        adLog(msg = "GroMore广告-开屏-关闭")
                         adListener.onAdClose()
                     }
                 })
                 gmAppOpenAd.showAd(splashViewGroup)
             }
+        } else {
+            adLog(msg = "GorMore广告-开屏-展示失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
+            adListener.onAdShowFail("GorMore广告-激励视频-加载失败:类型错误,adObject类型错误或为空:${success.adObject?.javaClass?.simpleName}")
         }
     }
 
@@ -211,7 +242,8 @@ class GroMoreAdLoader : AdLoader {
             AdType.INTERSTITIAL -> showInterstitialAd(activity, success, adListener)
             AdType.REWARDED_VIDEO -> showRewardedAd(activity, success, adListener)
             else -> {
-                adListener.onAdShowFail("无对应广告类型的广告进行展示 AdType:${success.adBean.adType}")
+                adLog(msg = "GroMore广告-全屏-无对应广告类型的广告进行展示 AdType:${success.adBean.adType}")
+                adListener.onAdShowFail("GroMore广告-全屏-无对应广告类型的广告进行展示 AdType:${success.adBean.adType}")
             }
         }
     }

+ 7 - 5
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMAppOpenRequestImpl.kt

@@ -12,6 +12,7 @@ import com.composition.android.ad.gromore.load.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
 
@@ -32,21 +33,21 @@ class GMAppOpenRequestImpl : IAdFormatRequest{
                         override fun onSplashAdLoadFail(p0: AdError) {
                             printAdFailInfo(p0.code, p0.message)
                             if (it.isActive) {
-                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore开屏广告加载失败:${p0.message}"))
+                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败"))
                             }
                         }
 
                         override fun onSplashAdLoadSuccess() {
                             printAdInfo(adUnitBean)
                             if (it.isActive){
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTSplashAd, msg = "GroMore开屏广告加载成功"))
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTSplashAd, msg = "GroMore广告-开屏-加载成功"))
                             }
                         }
 
                         override fun onAdLoadTimeout() {
-                            printAdFailInfo(0, "GroMore开屏广告加载超时")
+                            printAdFailInfo(0, "GroMore广告-开屏-加载超时")
                             if (it.isActive){
-                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore开屏广告加载超时"))
+                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载超时"))
                             }
 
                         }
@@ -55,7 +56,8 @@ class GMAppOpenRequestImpl : IAdFormatRequest{
 
             }else{
                 if (it.isActive) {
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore开屏广告需要context为Activity"))
+                    adLog(msg = "GroMore广告-开屏-加载失败:context需要为Activity")
+                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败:context需要为Activity"))
                 }
             }
         }

+ 6 - 3
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMBannerRequestImpl.kt

@@ -41,6 +41,7 @@ class GMBannerRequestImpl : IAdFormatRequest {
                         .setImageAdSize(size.first, size.second)
                         .setMuted(true)
                         .build()
+
                     mTTBannerViewAd.loadAd(slotBanner, object : GMBannerAdLoadCallback {
                         override fun onAdFailedToLoad(p0: AdError) {
                             printAdFailInfo(p0.code, p0.message)
@@ -52,14 +53,16 @@ class GMBannerRequestImpl : IAdFormatRequest {
                         override fun onAdLoaded() {
                             printAdInfo(adUnitBean)
                             if (it.isActive) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTBannerViewAd, msg = "GroMore Banner广告加载成功"))
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTBannerViewAd, msg = "GroMore广告-横幅-加载成功"))
                             }
                         }
                     })
 
                 } else {
-                    adLogE(AdManager.TAG, "GroMore广告加载context需要为Activity")
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告加载context需要为Activity"))
+                    if (it.isActive){
+                        adLogE(AdManager.TAG, "GroMore广告-横幅-加载失败:context需要为Activity")
+                        it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-横幅-加载失败:context需要为Activity"))
+                    }
                 }
             }
         }

+ 7 - 4
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMInterstitialRequestImpl.kt

@@ -13,6 +13,7 @@ import com.composition.android.ad.gromore.load.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
 
@@ -37,7 +38,7 @@ class GMInterstitialRequestImpl : IAdFormatRequest {
                             override fun onInterstitialFullLoadFail(p0: AdError) {
                                 printAdFailInfo(p0.code, p0.message)
                                 if (it.isActive){
-                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore插屏广告加载失败:${p0.message}"))
+                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败"))
                                 }
                             }
 
@@ -49,15 +50,17 @@ class GMInterstitialRequestImpl : IAdFormatRequest {
                                 printAdInfo(adUnitBean)
                                 //这里为广告已经缓存好了,保证流畅播放,再次返回成功
                                 if (it.isActive){
-                                    it.resume(AdResult.Success(adBean = adUnitBean, adObject = mInterstitialFullAd, msg = "GroMore 插屏广告加载成功"))
+                                    it.resume(AdResult.Success(adBean = adUnitBean, adObject = mInterstitialFullAd, msg = "GroMore广告-插屏-加载成功"))
                                 }
                             }
                         })
 
                     }else{
-                        it.resume(AdResult.Fail(adUnitBean, msg = "GroMore加载插屏广告context 类型需要为activity"))
+                        if (it.isActive){
+                            adLog(msg = "GroMore广告-插屏-加载失败:context需要为activity")
+                            it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败:context需要为activity"))
+                        }
                     }
-
             }
         }
     }

+ 19 - 11
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMNativeTemplateRequestImpl.kt

@@ -10,9 +10,12 @@ import com.bytedance.msdk.api.v2.slot.GMAdOptionUtil
 import com.bytedance.msdk.api.v2.slot.GMAdSlotNative
 import com.bytedance.sdk.openadsdk.AdSlot
 import com.composition.android.ad.gromore.load.util.GMSettingConfig
+import com.composition.android.ad.gromore.load.util.printAdFailInfo
+import com.composition.android.ad.gromore.load.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.adLog
 import com.convenient.android.common.extension.getScreenWidthDp
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.resume
@@ -28,7 +31,7 @@ class GMNativeTemplateRequestImpl() : IAdFormatRequest {
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
 
         return suspendCancellableCoroutine {
-            if (context is Activity){
+            if (context is Activity) {
                 GMSettingConfig.loadAdConfig {
 
                     val gmNativeAd = GMUnifiedNativeAd(context, adUnitBean.adUnitId)
@@ -39,29 +42,34 @@ class GMNativeTemplateRequestImpl() : IAdFormatRequest {
                         .setAdStyleType(AdSlot.TYPE_FEED)
                         .setImageAdSize(context.getScreenWidthDp().toInt(), 340)
                         .build(),
-                        object  : GMNativeAdLoadCallback{
+                        object : GMNativeAdLoadCallback {
                             override fun onAdLoaded(p0: MutableList<GMNativeAd>) {
+                                printAdInfo(adUnitBean)
                                 if (it.isActive) {
-                                    if (p0.isNullOrEmpty().not()){
-                                        it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0.get(0), msg = "GroMore原生模板广告加载成功"))
-                                    }else{
-                                        it.resume(AdResult.Fail(adUnitBean, msg = "GroMore 原生模板广告"))
+                                    if (p0.isNullOrEmpty().not()) {
+                                        it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0.get(0), msg = "GroMore广告-原生模板-加载成功"))
+                                    } else {
+                                        it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
                                     }
                                 }
                             }
+
                             override fun onAdLoadedFail(p0: AdError) {
+                                printAdFailInfo(p0.code, p0.message)
+                                if (it.isActive) {
+                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
+                                }
                             }
                         }
                     )
                 }
-
-            }else{
+            } else {
                 if (it.isActive) {
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore 原生广告加载需要context为Activity类型"))
+                    adLog(msg = "GroMore广告-原生模板-context需要为Activity类型")
+                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-context需要为Activity类型"))
                 }
             }
-
         }
-
     }
+
 }

+ 6 - 6
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMRewardRequestImpl.kt

@@ -9,6 +9,7 @@ import com.bytedance.msdk.api.v2.ad.reward.GMRewardedAdLoadCallback
 import com.bytedance.msdk.api.v2.slot.GMAdSlotRewardVideo
 import com.composition.android.ad.gromore.load.util.GMSettingConfig
 import com.composition.android.ad.gromore.load.util.printAdFailInfo
+import com.composition.android.ad.gromore.load.util.printAdInfo
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
@@ -36,7 +37,7 @@ class GMRewardRequestImpl : IAdFormatRequest {
                         override fun onRewardVideoLoadFail(p0: AdError) {
                            printAdFailInfo(p0.code, p0.message)
                             if (it.isActive){
-                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore激励视频广告加载失败:${p0.message}"))
+                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载失败"))
                             }
                         }
 
@@ -44,20 +45,19 @@ class GMRewardRequestImpl : IAdFormatRequest {
                         }
 
                         override fun onRewardVideoCached() {
+                            printAdInfo(adUnitBean)
                             if (it.isActive){
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = gmRewardAd, msg = "GroMore激励视频广告加载成功"))
+                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = gmRewardAd, msg = "GroMore广告-激励视频-加载成功"))
                             }
                         }
-
                     })
                 }
             }else{
-                printAdFailInfo(0, "GroMore加载激励视频广告需要context为Activity")
+                printAdFailInfo(0, "GroMore广告-激励视频-加载异常:context需要为Activity类型")
                 if (it.isActive){
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore加载激励视频广告需要context为Activity"))
+                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载异常:context需要为Activity类型"))
                 }
             }
-
         }
     }
 }

+ 4 - 0
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/util/GMSettingConfig.kt

@@ -14,6 +14,10 @@ import kotlin.coroutines.resume
 object GMSettingConfig {
 
 
+    /**
+     * 加载广告配置
+     * 在加载GroMore广告前需要先调用此方法获取GroMore广告位的中介配置
+     */
     fun loadAdConfig(callBack: () -> Unit) {
         if (GMMediationAdSdk.configLoadSuccess()) {
             callBack.invoke()

+ 5 - 0
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/view/GMBannerView.kt

@@ -10,6 +10,7 @@ import com.bytedance.msdk.api.v2.ad.banner.GMBannerAdListener
 import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.BannerAdViewHolder
 import com.composition.android.lib.ad.basic.BasicAdView
+import com.composition.android.lib.ad.util.adLog
 import com.composition.android.lib.ad.util.adLogE
 
 /**
@@ -37,18 +38,22 @@ class GMBannerView(context: Context?) : BasicAdView<View>(context) {
             }
 
             override fun onAdClosed() {
+                adLog(msg = "GroMore广告-横幅-关闭")
                 viewHolder?.adListener?.onAdClose()
             }
 
             override fun onAdClicked() {
+                adLog(msg = "GroMore广告-横幅-点击")
                 viewHolder?.adListener?.onAdClick()
             }
 
             override fun onAdShow() {
+                adLog(msg = "GroMore广告-横幅-展示")
                 adResult?.adBean?.let { viewHolder?.adListener?.onAdShow(it) }
             }
 
             override fun onAdShowFail(p0: AdError) {
+                adLog(msg = "GroMore广告-横幅-展示失败")
                 viewHolder?.adListener?.onAdShowFail(p0.message)
             }
         })

+ 41 - 5
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/view/GMNativeTemplateAdView.kt

@@ -3,15 +3,20 @@ package com.composition.android.ad.gromore.load.view
 import android.content.Context
 import android.view.LayoutInflater
 import android.view.View
+import android.widget.FrameLayout
+import com.bytedance.msdk.api.UIUtils
 import com.bytedance.msdk.api.format.TTNativeAdView
+import com.bytedance.msdk.api.v2.GMAdSize
 import com.bytedance.msdk.api.v2.GMDislikeCallback
 import com.bytedance.msdk.api.v2.ad.nativeAd.GMNativeAd
-import com.bytedance.msdk.api.v2.ad.nativeAd.GMNativeAdListener
-import com.bytedance.sdk.openadsdk.TTNativeExpressAd
+import com.bytedance.msdk.api.v2.ad.nativeAd.GMNativeExpressAdListener
 import com.composition.android.ad.gromore.R
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.basic.BasicAdView
 import com.composition.android.lib.ad.basic.NativeAdViewHolder
+import com.composition.android.lib.ad.util.adLog
+import com.convenient.android.common.extension.getScreenWidth
+import com.convenient.android.common.extension.removeParentView
 
 /**
  * @classname:
@@ -67,6 +72,7 @@ class GMNativeTemplateAdView(context: Context?) : BasicAdView<View>(context) {
             if (gmNativeAd.hasDislike() && nativeAdViewHolder.activity != null) {
                 gmNativeAd.setDislikeCallback(nativeAdViewHolder.activity, object : GMDislikeCallback {
                     override fun onSelected(p0: Int, p1: String?) {
+                        adLog(msg = "GroMore广告-原生模板-点击了不喜欢")
                         nativeAdViewHolder.adListener?.onAdDisLike()
                     }
 
@@ -81,18 +87,48 @@ class GMNativeTemplateAdView(context: Context?) : BasicAdView<View>(context) {
 
                 })
             }
-            gmNativeAd.setNativeAdListener(object : GMNativeAdListener {
+            gmNativeAd.setNativeAdListener(object : GMNativeExpressAdListener {
                 override fun onAdClick() {
+                    adLog(msg = "GroMore广告-原生模板-点击")
                     nativeAdViewHolder.adListener?.onAdClick()
                 }
 
                 override fun onAdShow() {
+                    adLog(msg = "GroMore广告-原生模板-展示")
                     nativeAdViewHolder.adListener?.onAdShow(adUnitBean = success.adBean)
                 }
+
+                override fun onRenderFail(p0: View?, p1: String?, p2: Int) {
+                    adLog(msg = "GroMore广告-原生模板-展示失败")
+                    nativeAdViewHolder.adListener?.onAdShowFail(p1?:"GroMore原生模板广告渲染失败")
+                }
+
+                override fun onRenderSuccess(width: Float, height: Float) {
+
+                    nativeAdViewHolder.adListener?.onAdShow(success.adBean)
+                    //获取视频播放view,该view SDK内部渲染,在媒体平台可配置视频是否自动播放等设置。
+                    val sWidth: Int
+                    val sHeight: Int
+                    val video: View? = gmNativeAd.expressView // 获取广告view  如果存在父布局,需要先从父布局中移除
+                    if (width == GMAdSize.FULL_WIDTH.toFloat() && height == GMAdSize.AUTO_HEIGHT.toFloat()) {
+                        sWidth = FrameLayout.LayoutParams.MATCH_PARENT
+                        sHeight = FrameLayout.LayoutParams.WRAP_CONTENT
+                    } else {
+                        sWidth = context.getScreenWidth()
+                        sHeight = (sWidth * height / width).toInt()
+                    }
+
+                    if (video != null){
+                        //如果存在父布局,需要先从父布局中移除
+                        video.removeParentView()
+                        ttNativeAdView.removeAllViews()
+                        val layoutParams = FrameLayout.LayoutParams(sWidth, sHeight)
+                        ttNativeAdView.addView(gmNativeAd.expressView, layoutParams)
+                    }
+                }
             })
+            //进行广告渲染
             gmNativeAd.render()
-            ttNativeAdView.removeAllViews()
-            ttNativeAdView.addView(gmNativeAd.expressView)
         }
     }
 }

+ 8 - 0
lib_common/src/main/java/com/convenient/android/common/extension/ViewExtensions.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.content.Context
 import android.content.ContextWrapper
 import android.view.View
+import android.view.ViewGroup
 import androidx.annotation.DrawableRes
 import androidx.core.content.ContextCompat
 import androidx.lifecycle.findViewTreeLifecycleOwner
@@ -138,4 +139,11 @@ fun View.getActivityFromView() : Activity?{
         cont = cont.baseContext
     }
     return null
+}
+
+fun View.removeParentView(){
+    if (this.parent is ViewGroup) {
+        val parent = parent as ViewGroup
+        parent.removeView(this)
+    }
 }