Parcourir la source

【GroMore】增加BeiZis自定义开屏广告

liuxiaolong il y a 1 an
Parent
commit
4a1e1107ff
50 fichiers modifiés avec 641 ajouts et 432 suppressions
  1. 44 36
      app/build.gradle
  2. BIN
      app/libs/Baidu_MobAds_SDK_v9.28.aar
  3. BIN
      app/libs/GDTSDK.unionNormal.4.520.1390.aar
  4. 0 0
      app/libs/beizi_ad_sdk_3.4.20.23.aar
  5. 0 0
      app/libs/beizi_fusion_sdk_4.90.2.27.aar
  6. BIN
      app/libs/windAd-4.10.1.aar
  7. BIN
      app/libs/windAd-common-1.4.4.aar
  8. 104 1
      app/proguard-rules.pro
  9. 92 0
      app/src/main/AndroidManifest.xml
  10. 3 2
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/AdMainActivity.kt
  11. 5 4
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/model/Datas.kt
  12. 0 2
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/viewmodel/AdConfigViewModel.kt
  13. 4 0
      app/src/main/res/layout/activity_app_welcome.xml
  14. 17 0
      app/src/main/res/xml/network_security_config.xml
  15. 8 0
      app/src/main/res/xml/pangle_file_path.xml
  16. 1 0
      gradle.properties
  17. 1 1
      gradle/wrapper/gradle-wrapper.properties
  18. 1 1
      keystore.properties
  19. 2 2
      lib_ad_admob/build.gradle
  20. 2 2
      lib_ad_applovinmax/build.gradle
  21. 1 3
      lib_ad_core/build.gradle
  22. 3 0
      lib_ad_core/src/main/java/com/composition/android/lib/ad/AdLoad.kt
  23. 7 0
      lib_ad_core/src/main/java/com/composition/android/lib/ad/util/AdLog.kt
  24. 1 1
      lib_ad_csj/build.gradle
  25. 2 19
      lib_ad_gromore/build.gradle
  26. 4 0
      lib_ad_gromore/proguard-rules.pro
  27. 6 9
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/impl/GroMoreInitialize.kt
  28. 0 27
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/impl/custom/BeiZiInitialize.kt
  29. 3 2
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMAppOpenRequestImpl.kt
  30. 0 112
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/custom/CustomBeiZiAppOpenRequestImpl.kt
  31. 1 0
      lib_ad_gromore_beizis/.gitignore
  32. 57 0
      lib_ad_gromore_beizis/build.gradle
  33. 0 0
      lib_ad_gromore_beizis/consumer-rules.pro
  34. BIN
      lib_ad_gromore_beizis/libs/beizi_ad_sdk_3.4.20.23.aar
  35. BIN
      lib_ad_gromore_beizis/libs/beizi_fusion_sdk_4.90.2.27.aar
  36. 21 0
      lib_ad_gromore_beizis/proguard-rules.pro
  37. 24 0
      lib_ad_gromore_beizis/src/androidTest/java/com/composition/android/ad/gromore/beizis/ExampleInstrumentedTest.kt
  38. 4 0
      lib_ad_gromore_beizis/src/main/AndroidManifest.xml
  39. 67 0
      lib_ad_gromore_beizis/src/main/java/com/composition/android/ad/gromore/beizis/BeiZiInitialize.kt
  40. 138 0
      lib_ad_gromore_beizis/src/main/java/com/composition/android/ad/gromore/beizis/CustomBeiZiAppOpenRequestImpl.kt
  41. 17 0
      lib_ad_gromore_beizis/src/test/java/com/composition/android/ad/gromore/beizis/ExampleUnitTest.kt
  42. BIN
      lib_ad_repository/admob/ad_admob_1.0.2_2023_05_23_release.aar
  43. BIN
      lib_ad_repository/app_lovin_max/ad_app_lovin_max_1.0.2_2023-05-23_release.aar
  44. BIN
      lib_ad_repository/core/ad_core_1.0.2_2023-05_23_release.aar
  45. BIN
      lib_ad_repository/gro_more/ad_gromore_1.0.2_2023-05-23_release.aar
  46. BIN
      lib_ad_repository/gro_more_beizis/ad_gromore_beizis_1.0.2_2023_05_24_release.aar
  47. 0 67
      lib_ad_scope/src/main/java/com/ad/scope/impl/ScopeInitialize.kt
  48. 0 78
      lib_ad_scope/src/main/java/com/ad/scope/load/ScopeAdLoader.kt
  49. 0 62
      lib_ad_scope/src/main/java/com/ad/scope/load/request/ScopeAppOpenRequestImpl.kt
  50. 1 1
      settings.gradle

+ 44 - 36
app/build.gradle

@@ -43,12 +43,21 @@ android {
 
     buildTypes {
         release {
+            signingConfig signingConfigs.release
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
 
         debug {
+//            debuggable true
+//            //混淆
+//            minifyEnabled true
+//            //Zipalign优化
+//            zipAlignEnabled true
+
             signingConfig signingConfigs.release
+//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+
         }
     }
 //
@@ -95,45 +104,26 @@ android {
 
 
 dependencies {
-//    implementation 'com.google.android.gms:play-services-ads:21.3.0'
-//    implementation 'com.pangle.cn:ads-sdk-pro:4.8.0.8'
-//    implementation "com.gromore.cn:gromore-sdk:3.7.0.3"
-//    implementation "com.gromore.cn:pangle-adapter:4.8.0.8.2"
+    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
+
     //mintegral
-    api("com.mbridge.msdk.support:videojs:16.2.27")
-    api("com.mbridge.msdk.support:mbjscommon:16.2.27")
-    api("com.mbridge.msdk.support:playercommon:16.2.27")
-    api("com.mbridge.msdk.support:reward:16.2.27")
-    api("com.mbridge.msdk.support:videocommon:16.2.27")
-    api("com.mbridge.msdk.support:chinasame:16.2.27")
-    api("com.mbridge.msdk.support:interstitialvideo:16.2.27")
-    api("com.mbridge.msdk.support:mbnative:16.2.27")
-    api("com.mbridge.msdk.support:nativeex:16.2.27")
-    api("com.mbridge.msdk.support:mbnativeadvanced:16.2.27")
-    api("com.mbridge.msdk.support:interstitial:16.2.27")
-    api("com.mbridge.msdk.support:mbbanner:16.2.27")
-    api("com.mbridge.msdk.support:mbsplash:16.2.27")
-    api("com.mbridge.msdk.support:mbbid:16.2.27")
-    api("com.mbridge.msdk.support:newinterstitial:16.2.27")
+    api("com.mbridge.msdk.support:videojs:16.3.27")
+    api("com.mbridge.msdk.support:mbjscommon:16.3.27")
+    api("com.mbridge.msdk.support:playercommon:16.3.27")
+    api("com.mbridge.msdk.support:reward:16.3.27")
+    api("com.mbridge.msdk.support:videocommon:16.3.27")
+    api("com.mbridge.msdk.support:chinasame:16.3.27")
+    api("com.mbridge.msdk.support:interstitialvideo:16.3.27")
+    api("com.mbridge.msdk.support:mbnative:16.3.27")
+    api("com.mbridge.msdk.support:nativeex:16.3.27")
+    api("com.mbridge.msdk.support:mbnativeadvanced:16.3.27")
+    api("com.mbridge.msdk.support:interstitial:16.3.27")
+    api("com.mbridge.msdk.support:mbbanner:16.3.27")
+    api("com.mbridge.msdk.support:mbsplash:16.3.27")
+    api("com.mbridge.msdk.support:mbbid:16.3.27")
+    api("com.mbridge.msdk.support:newinterstitial:16.3.27")
     api fileTree(dir: "libs", include: ["*.jar", "*.aar"])
-
     implementation project(':lib_common')
-    implementation project(':lib_ad_core')
-    implementation project(':lib_ad_admob')
-    implementation project(':lib_ad_csj')
-    implementation project(':lib_ad_applovinmax')
-    implementation project(':lib_ad_gromore')
-    implementation project(':lib_ad_scope')
-    implementation project(':lib_pdf_base')
-
-    implementation "com.pangle.cn:mediation-gdt-adapter:4.520.1390.0"
-    implementation "com.pangle.cn:mediation-baidu-adapter:9.271.1"
-    implementation "com.pangle.cn:mediation-klevin-adapter:2.11.0.3.5"//游可赢 adapter
-    implementation "com.pangle.cn:mediation-mintegral-adapter:16.4.17.2"//mintegral adapter
-    implementation "com.pangle.cn:mediation-sigmob-adapter:4.10.1.0"
-
-    implementation 'com.pangle.cn:mediation-sdk:5.1.6.1'
-    implementation 'com.pangle.cn:mediation-test-tools:5.1.6.1'//测试工具
 
     //compose依赖
     implementation "androidx.compose.ui:ui:$compose_version"
@@ -163,4 +153,22 @@ dependencies {
     androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
     debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
     debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
+
+    //广告
+    implementation project(':lib_ad_core')
+    implementation project(':lib_ad_admob')
+    implementation project(':lib_ad_csj')
+    implementation project(':lib_ad_applovinmax')
+    implementation project(':lib_ad_gromore')
+    implementation project(':lib_ad_gromore_beizis')
+    implementation project(':lib_pdf_base')
+
+    implementation 'com.pangle.cn:mediation-sdk:5.1.7.3'
+    implementation 'com.pangle.cn:mediation-test-tools:5.1.7.3'//测试工具
+
+    implementation "com.pangle.cn:mediation-gdt-adapter:4.520.1390.1"
+    implementation "com.pangle.cn:mediation-baidu-adapter:9.271.1"
+    implementation "com.pangle.cn:mediation-klevin-adapter:2.11.0.3.5"//游可赢 adapter
+    implementation "com.pangle.cn:mediation-mintegral-adapter:16.4.17.2"//mintegral adapter
+    implementation "com.pangle.cn:mediation-sigmob-adapter:4.10.1.0"
 }

BIN
app/libs/Baidu_MobAds_SDK_v9.28.aar


BIN
app/libs/GDTSDK.unionNormal.4.520.1390.aar


lib_ad_scope/libs/beizi_ad_sdk_3.4.20.23.aar → app/libs/beizi_ad_sdk_3.4.20.23.aar


lib_ad_scope/libs/beizi_fusion_sdk_4.90.2.27.aar → app/libs/beizi_fusion_sdk_4.90.2.27.aar


BIN
app/libs/windAd-4.10.1.aar


BIN
app/libs/windAd-common-1.4.4.aar


+ 104 - 1
app/proguard-rules.pro

@@ -20,4 +20,107 @@
 # hide the original source file name.
 #-renamesourcefileattribute SourceFile
 
--keep class com.bytedance.mtesttools.api.** {*;}
+-keep class com.bytedance.mtesttools.api.** {*;}
+-keep class com.bytedance.mtesttools.api.** {public *;}
+
+-ignorewarnings
+
+-dontoptimize
+-dontpreverify
+-dontwarn android.app.**
+-dontwarn android.support.**
+-dontwarn sun.misc.**
+-keepattributes Signature
+-keepattributes *Annotation*
+-dontwarn android.support.**
+
+
+-keep class sun.misc.**{*;}
+-keep class android.support.** { *; }
+-keep class android.app.**{*;}
+-keep class **.R$* {*;}
+
+# 倍孜混淆
+-dontwarn com.beizi.fusion.**
+-dontwarn com.beizi.ad.**
+-keep class com.beizi.fusion.** {*; }
+-keep class com.beizi.ad.** {*; }
+
+-keep class com.qq.e.** {
+    public protected *;
+}
+
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
+
+-dontwarn  org.apache.**
+
+# 百度广告渠道混淆
+-dontwarn com.baidu.mobads.sdk.api.**
+-keepclassmembers class * extends android.app.Activity {
+public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keep class com.baidu.mobads.** { *; }
+-keep class com.style.widget.** {*;}
+-keep class com.component.** {*;}
+-keep class com.baidu.ad.magic.flute.** {*;}
+-keep class com.baidu.mobstat.forbes.** {*;}
+
+# 穿山甲广告渠道混淆
+-keep class com.bytedance.sdk.openadsdk.** { *; }
+-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
+-keep class com.pgl.sys.ces.** {*;}
+-keep class com.bytedance.embed_dr.** {*;}
+-keep class com.bytedance.embedapplog.** {*;}
+
+# 移动安全联盟oaid混淆
+-keep class XI.CA.XI.**{*;}
+-keep class XI.K0.XI.**{*;}
+-keep class XI.XI.K0.**{*;}
+-keep class XI.xo.XI.XI.**{*;}
+-keep class com.asus.msa.SupplementaryDID.**{*;}
+-keep class com.asus.msa.sdid.**{*;}
+-keep class com.bun.lib.**{*;}
+-keep class com.bun.miitmdid.**{*;}
+-keep class com.huawei.hms.ads.identifier.**{*;}
+-keep class com.samsung.android.deviceidservice.**{*;}
+-keep class com.zui.opendeviceidlibrary.**{*;}
+-keep class org.json.**{*;}
+-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
+
+# 快手广告渠道混淆
+-keep class org.chromium.** {*;}
+-keep class org.chromium.** { *; }
+-keep class aegon.chrome.** { *; }
+-keep class com.kwai.**{ *; }
+-dontwarn com.kwai.**
+-dontwarn com.kwad.**
+-dontwarn com.ksad.**
+-dontwarn aegon.chrome.**
+
+# GroMore混淆
+-keep class bykvm*.**
+-keep class com.bytedance.msdk.adapter.**{ public *; }
+-keep class com.bytedance.msdk.api.** {
+ public *;
+}
+-keep class com.bytedance.msdk.base.TTBaseAd{*;}
+-keep class com.bytedance.msdk.adapter.TTAbsAdLoaderAdapter{
+    public *;
+    protected <fields>;
+}
+
+# MTG混淆
+-keep class com.mbridge.** {*; }
+-keep interface com.mbridge.** {*; }
+-dontwarn com.mbridge.**
+-keep class **.R$* { public static final int mbridge*; }
+
+#广告组件混淆配置
+-keep class com.composition.android.** {*;}
+-keep interface com.composition.android.** {*;}

+ 92 - 0
app/src/main/AndroidManifest.xml

@@ -32,6 +32,7 @@
         android:fullBackupContent="@xml/backup_rules"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
+        android:networkSecurityConfig="@xml/network_security_config"
         android:requestLegacyExternalStorage="true"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
@@ -96,5 +97,96 @@
         <meta-data
             android:name="com.google.android.gms.ads.APPLICATION_ID"
             android:value="ca-app-pub-3940256099942544~3347511713" />
+
+
+        <!-- GroMore 穿山甲广告 Start-->
+        <provider
+            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
+            android:authorities="${applicationId}.TTMultiProvider"
+            android:exported="false" />
+        <!-- GroMore 穿山甲广告 end-->
+        <!-- GroMore BeiZis Start-->
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/beizi_file_path" />
+        </provider>
+        <!-- GroMore BeiZis End-->
+
+        <!-- GroMore Baidu Start-->
+        <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" />
+
+        <!-- 如果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>
+        <!-- GroMore Baidu End-->
+
+        <!-- GroMore GDT Start-->
+        <provider
+            android:name="com.qq.e.comm.GDTFileProvider"
+            android:authorities="${applicationId}.gdt.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/gdt_file_path" />
+        </provider>
+
+        <activity
+            android:name="com.qq.e.ads.PortraitADActivity"
+            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name="com.qq.e.ads.LandscapeADActivity"
+            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            tools:replace="android:screenOrientation" />
+
+        <!-- 声明SDK所需要的组件 -->
+        <service
+            android:name="com.qq.e.comm.DownloadService"
+            android:exported="false" />
+        <!-- 请开发者注意字母的大小写,ADActivity,而不是AdActivity -->
+
+        <activity
+            android:name="com.qq.e.ads.ADActivity"
+            android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
+
+        <!-- GroMore GDT END-->
+
+        <!-- GroMore Klevin 游可赢 Start-->
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/beizi_file_path" />
+        </provider>
+        <!-- GroMore Klevin 游可赢 End-->
+
     </application>
 </manifest>

+ 3 - 2
app/src/main/java/com/convenient/android/lib/ui/sample/ad/AdMainActivity.kt

@@ -5,6 +5,7 @@ import android.util.Log
 import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatActivity
 import com.composition.android.ad.admob.impl.AdmobInitialize
+import com.composition.android.ad.csj.impl.CSJInitialize
 import com.composition.android.ad.gromore.impl.GroMoreInitialize
 import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.AdUnitConfigManager
@@ -30,8 +31,8 @@ class AdMainActivity : AppCompatActivity() {
         AdManager.instance.initAdvertisersSDK(applicationContext, AdmobInitialize(), GroMoreInitialize("5089223"))
         val list = mutableListOf<AdUnitBean>()
 //        list.addAll(Datas.AdmobAdUnitList)
-//        list.addAll(Datas.CSJAdUnitList)
-        list.addAll(Datas.GroMoreAdUnitList)
+        list.addAll(Datas.CSJAdUnitList)
+//        list.addAll(Datas.GroMoreAdUnitList)
 //        list.addAll(Datas.AppLovinMaxAdUnitList)
         AdUnitConfigManager.instance.setAdUnits(list)
 

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

@@ -58,11 +58,12 @@ object Datas {
 
     val CSJAdUnitList: List<AdUnitBean> =
         listOf(
-            AdUnitBean(BANNER, Advertisers.CSJ.name, AdType.BANNER.name, "949726232", adSize = AdSize.Builder.create().buildCSJBannerAdSize(600F, 90F)),
-            AdUnitBean(NATIVE_TEMPLATE, Advertisers.CSJ.name, AdType.NATIVE_TEMPLATE.name, "949726254"),
-            AdUnitBean(INTERSTITIAL, Advertisers.CSJ.name, AdType.INTERSTITIAL.name, "949726267"),
+            AdUnitBean(BANNER, Advertisers.CSJ.name, AdType.BANNER.name, "946203930", adSize = AdSize.Builder.create().buildCSJBannerAdSize(600F, 90F)),
+            AdUnitBean(NATIVE, Advertisers.CSJ.name, AdType.NATIVE.name, "946203930", adSize = AdSize.Builder.create().buildCSJBannerAdSize(600F, 90F)),
+            AdUnitBean(NATIVE_TEMPLATE, Advertisers.CSJ.name, AdType.NATIVE_TEMPLATE.name, "945777279"),
+            AdUnitBean(INTERSTITIAL, Advertisers.CSJ.name, AdType.INTERSTITIAL.name, "946096767"),
             AdUnitBean(REWARDED_VIDEO, Advertisers.CSJ.name, AdType.REWARDED_VIDEO.name, "949726565"),
-            AdUnitBean(APP_OPEN, Advertisers.CSJ.name, AdType.APP_OPEN.name, "887922330", requestAdConfig = AdUnitLoadConfig(adLoadRetryCount = 1, adLoadTimeOut = 5000))
+            AdUnitBean(APP_OPEN, Advertisers.CSJ.name, AdType.APP_OPEN.name, "887352035", requestAdConfig = AdUnitLoadConfig(adLoadRetryCount = 1, adLoadTimeOut = 5000))
         )
 
     val GroMoreAdUnitList: List<AdUnitBean> =

+ 0 - 2
app/src/main/java/com/convenient/android/lib/ui/sample/ad/viewmodel/AdConfigViewModel.kt

@@ -2,7 +2,6 @@ package com.convenient.android.lib.ui.sample.ad.viewmodel
 
 import androidx.compose.runtime.mutableStateOf
 import androidx.lifecycle.ViewModel
-import com.ad.scope.load.ScopeAdLoader
 import com.composition.android.ad.admob.load.AdmobAdLoader
 import com.composition.android.ad.applovinmax.load.AppLovinMaxLoader
 import com.composition.android.ad.gromore.load.GroMoreAdLoader
@@ -36,7 +35,6 @@ class AdConfigViewModel : ViewModel() {
             Advertisers.CSJ -> GroMoreAdLoader()
             Advertisers.GroMore -> GroMoreAdLoader()
             Advertisers.AppLovinMax -> AppLovinMaxLoader()
-            Advertisers.AdScope -> ScopeAdLoader()
             else -> UnknownAdLoader()
         }
     }

+ 4 - 0
app/src/main/res/layout/activity_app_welcome.xml

@@ -33,5 +33,9 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:id="@+id/ll_ad_content"
+        android:orientation="vertical"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
         />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 17 - 0
app/src/main/res/xml/network_security_config.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config cleartextTrafficPermitted="true" />
+    <domain-config>
+        <domain includeSubdomains="true">i.snssdk.com</domain>
+        <domain includeSubdomains="true">is.snssdk.com</domain>
+        <domain includeSubdomains="true">pangolin.snssdk.com</domain>
+        <domain includeSubdomains="true">extlog.snssdk.com</domain>
+        <domain includeSubdomains="true">sf3-ttcdn-tos.pstatp.com</domain>
+        <domain includeSubdomains="true">bds.snssdk.com</domain>
+        <domain includeSubdomains="true">dig.bdurl.net</domain>
+        <trust-anchors>
+            <certificates src="user" />//信任用户自己安装的证书
+            <certificates src="system" />
+        </trust-anchors>
+    </domain-config>
+</network-security-config>

+ 8 - 0
app/src/main/res/xml/pangle_file_path.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+    <external-path name="tt_external_root" path="." />
+    <external-path name="tt_external_download" path="Download" />
+    <external-files-path name="tt_external_files_download" path="Download" />
+    <files-path name="tt_internal_file_download" path="Download" />
+    <cache-path name="tt_internal_cache_download" path="Download" />
+</paths>

+ 1 - 0
gradle.properties

@@ -23,3 +23,4 @@ kotlin.code.style=official
 android.nonTransitiveRClass=true
 android.enableJetifier=true
 Keystore.properties=./keystore.properties
+

+ 1 - 1
gradle/wrapper/gradle-wrapper.properties

@@ -1,4 +1,4 @@
-#Wed Jul 27 15:06:45 CST 2022
+#Tue May 09 16:06:46 CST 2023
 distributionBase=GRADLE_USER_HOME
 distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
 distributionPath=wrapper/dists

+ 1 - 1
keystore.properties

@@ -1,4 +1,4 @@
-keystore=/Users/hubowen/Git_Work/Kdan/Kdan_Librarys/app_keys/17PDF_Reader_old/pdfreader.keystore
+keystore=/Users/kdan/git_work/keystore/17PDF_Reader_Keystore/pdfreader.keystore
 keystore.password=kdan24373514
 keyAlias=noteledgekey
 keyAlias.password=2437key3514

+ 2 - 2
lib_ad_admob/build.gradle

@@ -3,7 +3,7 @@ plugins {
     id 'org.jetbrains.kotlin.android'
 }
 
-def version = '1.0.1'
+def version = '1.0.2'
 def releaseTime() {
     return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
 }
@@ -56,5 +56,5 @@ android {
 dependencies {
     implementation project(':lib_ad_core')
 
-    api 'com.google.android.gms:play-services-ads:21.5.0'
+    api 'com.google.android.gms:play-services-ads:22.1.0'
 }

+ 2 - 2
lib_ad_applovinmax/build.gradle

@@ -4,7 +4,7 @@ plugins {
 }
 
 
-def version = '1.0.1'
+def version = '1.0.2'
 def releaseTime() {
     return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
 }
@@ -48,6 +48,6 @@ android {
 dependencies {
     implementation project(':lib_ad_core')
 
-    api 'com.applovin:applovin-sdk:11.6.1'
+    api 'com.applovin:applovin-sdk:11.7.1'
     api "com.google.android.gms:play-services-ads-identifier:18.0.1"
 }

+ 1 - 3
lib_ad_core/build.gradle

@@ -65,7 +65,5 @@ dependencies {
     api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
     api 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
     api 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
-    /*GroMore*/
-    api 'com.pangle.cn:mediation-sdk:5.1.6.1'
-//    api 'com.pangle.cn:mediation-test-tools:5.1.6.1'//测试工具
+
 }

+ 3 - 0
lib_ad_core/src/main/java/com/composition/android/lib/ad/AdLoad.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.content.Context
 import android.view.View
 import android.view.ViewGroup
+import androidx.fragment.app.FragmentActivity
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.basic.BannerAdViewHolder
 import com.composition.android.lib.ad.basic.NativeAdViewHolder
@@ -21,6 +22,8 @@ import kotlinx.coroutines.flow.Flow
  */
 object AdLoad {
 
+    public var activity : FragmentActivity? = null
+
     fun addToCache(adResult: AdResult.Success) {
         Api.instance.addToCache(adResult)
     }

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

@@ -20,6 +20,13 @@ fun adLogWithFrame(tag: String = AdManager.TAG, msg: String?) {
     adLog(tag, "└────────────────────────────────────────────────────────────────────────────────────────────────────────────────")
 }
 
+fun adLogWithFrame(tag: String = AdManager.TAG, vararg msgs: String) {
+    adLog(tag, "┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────")
+    for (value in msgs) {
+        adLog(tag, "│ $value")
+    }
+    adLog(tag, "└────────────────────────────────────────────────────────────────────────────────────────────────────────────────")
+}
 
 fun adLogE(tag: String, msg: String?) {
     if (AdManager.instance.logEnable) {

+ 1 - 1
lib_ad_csj/build.gradle

@@ -57,6 +57,6 @@ dependencies {
     implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
     implementation project(':lib_ad_core')
 
-//    implementation 'com.pangle.cn:ads-sdk-pro:5.3.0.3'
+    implementation 'com.pangle.cn:mediation-sdk:5.1.7.3'
     implementation 'androidx.legacy:legacy-support-v4:1.0.0'
 }

+ 2 - 19
lib_ad_gromore/build.gradle

@@ -57,26 +57,9 @@ android {
 dependencies {
     compileOnly fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
 
-    implementation project(':lib_ad_core')
+    api project(':lib_ad_core')
 
     /*GroMore*/
-//    api "com.pangle.cn:mediation-sdk:5.1.6.1"
+    api 'com.pangle.cn:mediation-sdk:5.1.7.3'
 
-    //融合SDK
-
-//    implementation "com.pangle.cn:mediation-ks-adapter:3.3.40.3"//ks adapter
-//
-//    implementation "com.pangle.cn:mediation-gdt-adapter:4.514.1384.2" //gdt adapter
-//
-//    implementation "com.pangle.cn:mediation-admob-adapter:17.2.0.42"//admob adapter
-//
-//    implementation "com.pangle.cn:mediation-baidu-adapter:9.271.1"//baidu adapter
-//
-//    implementation "com.pangle.cn:mediation-klevin-adapter:2.11.0.3.4"//游可赢 adapter
-//
-//    implementation "com.pangle.cn:mediation-mintegral-adapter:16.4.17.1"//mintegral adapter
-//
-//    api "com.pangle.cn:mediation-sigmob-adapter:4.9.0.4"//sigmob adapter
-//
-//    implementation "com.pangle.cn:mediation-unity-adapter:4.3.0.10"//unity adapter
 }

+ 4 - 0
lib_ad_gromore/proguard-rules.pro

@@ -136,3 +136,7 @@
 -keep class android.support.v4.** { *; }
 -dontwarn com.mbridge.**
 -keep class **.R$* { public static final int mbridge*; }
+
+#广告组件混淆配置
+-keep class com.composition.android.** {*;}
+-keep interface com.composition.android.** {*;}

+ 6 - 9
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/impl/GroMoreInitialize.kt

@@ -20,18 +20,12 @@ class GroMoreInitialize(var appId: String) : Initialize {
 
     override fun init(context: Context) {
         val userInfo = MediationConfigUserInfoForSegment()
-        userInfo.userId = "msdk-demo"
-        userInfo.gender = MediationConfigUserInfoForSegment.GENDER_MALE
-        userInfo.channel = "msdk-channel"
-        userInfo.subChannel = "msdk-sub-channel"
-        userInfo.age = 999
-        userInfo.userValueGroup = "msdk-demo-user-value-group"
 
         val customInfos: MutableMap<String, String> = HashMap()
-        customInfos["aaaa"] = "test111"
-        customInfos["bbbb"] = "test222"
         userInfo.customInfos = customInfos
 
+        var mediationExtra = mapOf("agreeAgreement" to true)
+
         TTAdSdk.init(context, TTAdConfig.Builder()
             .appId(appId)
             .useTextureView(true)
@@ -42,7 +36,10 @@ class GroMoreInitialize(var appId: String) : Initialize {
             .customController(object : TTCustomController() {
 
             })
-            .setMediationConfig(MediationConfig.Builder().setMediationConfigUserInfoForSegment(userInfo).build())
+
+            .setMediationConfig(MediationConfig.Builder()
+                .setLocalExtra(mediationExtra)
+                .build())
             .build(), object : TTAdSdk.InitCallback {
             override fun success() {
                 TTAdSdk.isInitSuccess()

+ 0 - 27
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/impl/custom/BeiZiInitialize.kt

@@ -1,27 +0,0 @@
-package com.composition.android.ad.gromore.impl.custom
-
-import android.content.Context
-import com.beizi.fusion.BeiZis
-import com.bytedance.sdk.openadsdk.mediation.bridge.custom.MediationCustomInitLoader
-import com.bytedance.sdk.openadsdk.mediation.custom.MediationCustomInitConfig
-import com.composition.android.ad.gromore.util.ThreadUtils
-
-/**
- * @author: HuBoWen
- * @date: 2023/5/4
- * @description:
- */
-class BeiZiInitialize : MediationCustomInitLoader() {
-    override fun initializeADN(context: Context?, customInitConfig: MediationCustomInitConfig?, localExtra: MutableMap<String, Any>?) {
-        if(!isInit){
-            ThreadUtils.runOnUIThread{
-                BeiZis.init(context, customInitConfig?.appId)
-                callInitSuccess()
-            }
-        }
-    }
-
-    override fun getNetworkSdkVersion(): String {
-        return BeiZis.getSdkVersion()
-    }
-}

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

@@ -2,6 +2,7 @@ package com.composition.android.ad.gromore.load.request
 
 import android.app.Activity
 import android.content.Context
+import com.beizi.fusion.SplashAd
 import com.bytedance.sdk.openadsdk.*
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -37,9 +38,9 @@ class GMAppOpenRequestImpl : IAdFormatRequest {
                             it.isActiveResult(AdResult.Fail(adBean = adUnitBean, msg = "GroMore-开屏-加载失败,请求超时"))
                         }
 
-                        override fun onSplashAdLoad(p0: TTSplashAd?) {
+                        override fun onSplashAdLoad(splashAd : TTSplashAd?) {
                             printAdInfo(adUnitBean)
-                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "GroMore-开屏-加载成功"))
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = splashAd, msg = "GroMore-开屏-加载成功"))
                         }
                     })
             } else {

+ 0 - 112
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/custom/CustomBeiZiAppOpenRequestImpl.kt

@@ -1,112 +0,0 @@
-package com.composition.android.ad.gromore.load.request.custom
-
-import android.content.Context
-import android.view.ViewGroup
-import com.beizi.fusion.AdListener
-import com.beizi.fusion.SplashAd
-import com.bytedance.sdk.openadsdk.AdSlot
-import com.bytedance.sdk.openadsdk.mediation.MediationConstant
-import com.bytedance.sdk.openadsdk.mediation.MediationConstant.AdIsReadyStatus
-import com.bytedance.sdk.openadsdk.mediation.bridge.custom.splash.MediationCustomSplashLoader
-import com.bytedance.sdk.openadsdk.mediation.custom.MediationCustomServiceConfig
-import com.composition.android.ad.gromore.util.ThreadUtils
-import com.composition.android.lib.ad.util.adLogWithFrame
-import com.composition.android.lib.ad.util.getScreenHeight
-import com.composition.android.lib.ad.util.getScreenHeightDp
-import com.composition.android.lib.ad.util.getScreenWidth
-import com.composition.android.lib.ad.util.getScreenWidthDp
-import java.util.concurrent.Callable
-import java.util.concurrent.Future
-import java.util.concurrent.TimeUnit
-
-/**
- * @author: HuBoWen
- * @date: 2023/4/25
- * @description:
- */
-class CustomBeiZiAppOpenRequestImpl : MediationCustomSplashLoader() {
-
-    private var splash: SplashAd? = null
-
-    override fun load(context: Context?, adSlot: AdSlot?, serviceConfig: MediationCustomServiceConfig?) {
-        ThreadUtils.runOnUIThread {
-            adLogWithFrame(msg = "scope onAdLoaded")
-            //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
-            context?.apply {
-                val splashWidthDp: Float = getScreenWidthDp(context)
-                val splashWidthPx: Int = getScreenWidth(context)
-                val screenHeightPx: Int = getScreenHeight(context)
-                val screenHeightDp: Float = getScreenHeightDp(context)
-
-                // 开屏高度 = 屏幕高度 - 下方预留的高度,demo中是预留了屏幕高度的1/5,因此开屏高度传入 屏幕高度*4/5
-                val splashHeightDp: Float = screenHeightDp * 4 / 4f
-                val splashHeightPx: Int = (screenHeightPx * 4 / 4f).toInt()
-
-                splash = SplashAd(context, null, serviceConfig?.adnNetworkSlotId, object : AdListener {
-                    override fun onAdLoaded() {
-                        adLogWithFrame(msg = "scope onAdLoaded")
-                        if (biddingType == MediationConstant.AD_TYPE_CLIENT_BIDING) {
-                            var epcm = splash?.ecpm?.toDouble()
-                            epcm?.apply {
-                                if (this < 0) {
-                                    epcm = 0.0
-                                }
-                                callLoadSuccess(epcm!!)
-                            }
-                        } else {
-                            callLoadSuccess()
-                        }
-                    }
-
-                    override fun onAdShown() {
-                        adLogWithFrame(msg = "scope onAdShown")
-                    }
-
-                    override fun onAdFailedToLoad(p0: Int) {
-                        adLogWithFrame(msg = "scope onAdFailedToLoad")
-//                    callLoadFail(p0, s)
-                    }
-
-                    override fun onAdClosed() {
-                        adLogWithFrame(msg = "scope onAdClosed")
-                        callSplashAdSkip()
-                    }
-
-                    override fun onAdTick(p0: Long) {
-                        adLogWithFrame(msg = "scope onAdTick")
-                    }
-
-                    override fun onAdClicked() {
-                        adLogWithFrame(msg = "scope onAdClicked")
-                        callSplashAdClicked()
-                    }
-                }, 5000)
-                splash?.loadAd(splashWidthPx, (screenHeightPx - 100))
-            }
-        }
-    }
-
-    override fun showAd(container: ViewGroup?) {
-        splash?.show(container)
-    }
-
-    override fun isReadyCondition(): AdIsReadyStatus {
-        /**
-         * 在子线程中进行广告是否可用的判断
-         */
-        val future: Future<AdIsReadyStatus> = ThreadUtils.runOnThreadPool(Callable {
-            if (splash != null) {
-                AdIsReadyStatus.AD_IS_READY
-            } else {
-                AdIsReadyStatus.AD_IS_NOT_READY
-            }
-        })
-        try {
-            val result = future[500, TimeUnit.MILLISECONDS] //设置500毫秒的总超时,避免线程阻塞
-            return result ?: AdIsReadyStatus.AD_IS_NOT_READY
-        } catch (e: Exception) {
-            e.printStackTrace()
-        }
-        return AdIsReadyStatus.AD_IS_NOT_READY
-    }
-}

+ 1 - 0
lib_ad_gromore_beizis/.gitignore

@@ -0,0 +1 @@
+/build

+ 57 - 0
lib_ad_gromore_beizis/build.gradle

@@ -0,0 +1,57 @@
+plugins {
+    id 'com.android.library'
+    id 'org.jetbrains.kotlin.android'
+}
+
+def version = '1.0.2'
+
+def releaseTime() {
+    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
+}
+
+android {
+    namespace 'com.composition.android.ad.gromore.beizis'
+    compileSdk = rootProject.ext.compileSdkVersion
+    buildToolsVersion rootProject.ext.buildToolsVersion
+
+    defaultConfig {
+        minSdkVersion rootProject.ext.minSdkVersion
+        targetSdkVersion rootProject.ext.targetSdkVersion
+    }
+
+    buildTypes {
+        debug {
+            libraryVariants.all { variant ->
+                variant.outputs.all { output ->
+                    if (outputFile != null && outputFileName.endsWith('.aar')) {
+                        outputFileName = "ad_gromore_beizis_${version}_${releaseTime()}_debug.aar"
+                    }
+                }
+            }
+        }
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            libraryVariants.all { variant ->
+                variant.outputs.all { output ->
+                    if (outputFile != null && outputFileName.endsWith('.aar')) {
+                        outputFileName = "ad_gromore_beizis_${version}_${releaseTime()}_release.aar"
+                    }
+                }
+            }
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+    kotlinOptions {
+        jvmTarget = '1.8'
+    }
+}
+
+dependencies {
+    compileOnly fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
+    implementation project(':lib_ad_gromore')
+
+}

+ 0 - 0
lib_ad_gromore_beizis/consumer-rules.pro


BIN
lib_ad_gromore_beizis/libs/beizi_ad_sdk_3.4.20.23.aar


BIN
lib_ad_gromore_beizis/libs/beizi_fusion_sdk_4.90.2.27.aar


+ 21 - 0
lib_ad_gromore_beizis/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 24 - 0
lib_ad_gromore_beizis/src/androidTest/java/com/composition/android/ad/gromore/beizis/ExampleInstrumentedTest.kt

@@ -0,0 +1,24 @@
+package com.composition.android.ad.gromore.beizis
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+    @Test
+    fun useAppContext() {
+        // Context of the app under test.
+        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+        assertEquals("com.composition.android.ad.gromore.beizis.test", appContext.packageName)
+    }
+}

+ 4 - 0
lib_ad_gromore_beizis/src/main/AndroidManifest.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+    <uses-permission android:name="android.permission.INTERNET"/>
+</manifest>

+ 67 - 0
lib_ad_gromore_beizis/src/main/java/com/composition/android/ad/gromore/beizis/BeiZiInitialize.kt

@@ -0,0 +1,67 @@
+package com.composition.android.ad.gromore.beizis
+
+import android.content.Context
+import com.beizi.ad.BeiZi
+import com.beizi.fusion.BeiZiCustomController
+import com.beizi.fusion.BeiZis
+import com.bytedance.sdk.openadsdk.mediation.bridge.custom.MediationCustomInitLoader
+import com.bytedance.sdk.openadsdk.mediation.custom.MediationCustomInitConfig
+import com.composition.android.ad.gromore.util.ThreadUtils
+import com.composition.android.lib.ad.util.adLogWithFrame
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
+import kotlinx.coroutines.launch
+
+/**
+ * @author: HuBoWen
+ * @date: 2023/5/4
+ * @description:
+ */
+class BeiZiInitialize : MediationCustomInitLoader() {
+
+    companion object{
+        const val EXTRA_AGREE_AGREEMENT = "extra_agree_agreement"
+    }
+
+    override fun initializeADN(context: Context?, customInitConfig: MediationCustomInitConfig?, localExtra: MutableMap<String, Any>?) {
+        if(!isInit){
+            GlobalScope.launch(Dispatchers.IO) {
+                adLogWithFrame("广告", "BenZi广告初始化 外层线程:${Thread.currentThread().name}")
+                async (Dispatchers.Main){
+                    val agreeAgreement = localExtra?.get(EXTRA_AGREE_AGREEMENT) as? Boolean ?:false
+                    adLogWithFrame("广告", "BenZi广告初始化: agree:${agreeAgreement}")
+                    val appId = "20826"
+                    adLogWithFrame("广告", "BenZi广告真实初始化: appID:${appId},mame:${customInitConfig?.adnName} 线程:${Thread.currentThread().name}")
+                    BeiZis.init(context, appId, object : BeiZiCustomController(){
+                        override fun isCanUseGaid(): Boolean {
+                            return agreeAgreement
+                        }
+
+                        override fun isCanUseLocation(): Boolean {
+                            return agreeAgreement
+                        }
+
+                        override fun isCanUseOaid(): Boolean {
+                            return agreeAgreement
+                        }
+
+                        override fun isCanUsePhoneState(): Boolean {
+                            return agreeAgreement
+                        }
+
+                        override fun isCanUseWifiState(): Boolean {
+                            return agreeAgreement
+                        }
+                    })
+                }.await()
+                adLogWithFrame("广告", "BenZi广告初始化完成:${BeiZis.isIsSyncInit()} 线程:${Thread.currentThread().name}")
+                callInitSuccess()
+            }
+        }
+    }
+
+    override fun getNetworkSdkVersion(): String {
+        return BeiZis.getSdkVersion()
+    }
+}

+ 138 - 0
lib_ad_gromore_beizis/src/main/java/com/composition/android/ad/gromore/beizis/CustomBeiZiAppOpenRequestImpl.kt

@@ -0,0 +1,138 @@
+package com.composition.android.ad.gromore.beizis
+
+import android.content.Context
+import android.view.ViewGroup
+import androidx.fragment.app.FragmentActivity
+import androidx.lifecycle.lifecycleScope
+import com.beizi.fusion.AdListener
+import com.beizi.fusion.SplashAd
+import com.bytedance.pangle.wrapper.PluginFragmentActivityWrapper
+import com.bytedance.sdk.openadsdk.AdSlot
+import com.bytedance.sdk.openadsdk.mediation.MediationConstant
+import com.bytedance.sdk.openadsdk.mediation.MediationConstant.AdIsReadyStatus
+import com.bytedance.sdk.openadsdk.mediation.bridge.custom.splash.MediationCustomSplashLoader
+import com.bytedance.sdk.openadsdk.mediation.custom.MediationCustomServiceConfig
+import com.composition.android.ad.gromore.util.ThreadUtils
+import com.composition.android.lib.ad.util.adLogWithFrame
+import com.composition.android.lib.ad.util.getScreenHeight
+import com.composition.android.lib.ad.util.getScreenWidth
+import kotlinx.coroutines.*
+import java.util.concurrent.Callable
+import java.util.concurrent.Future
+import java.util.concurrent.TimeUnit
+
+/**
+ * @author: HuBoWen
+ * @date: 2023/4/25
+ * @description:
+ */
+class CustomBeiZiAppOpenRequestImpl : MediationCustomSplashLoader() {
+
+    private var splash: SplashAd? = null
+
+    private var context : Context? = null
+
+    override fun load(context: Context, adSlot: AdSlot?, serviceConfig: MediationCustomServiceConfig?) {
+
+        GlobalScope.launch(Dispatchers.IO) {
+            if (context is FragmentActivity) {
+                context.lifecycleScope.launch(Dispatchers.Main) {
+                    this@CustomBeiZiAppOpenRequestImpl.context = context
+                    val activityWrapper = (context as? PluginFragmentActivityWrapper)
+                    if (activityWrapper == null) {
+                        adLogWithFrame(msgs = arrayOf( "GroMore-开屏-自定义BeiZis,加载取消,context必须为Activity"))
+                        callLoadFail(0, "context is not Activity")
+                        return@launch
+                    }
+                    val activity = activityWrapper.originActivity
+                    //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
+                    val splashWidthPx: Int = adSlot?.imgAcceptedWidth ?: getScreenWidth(activity)
+                    val screenHeightPx: Int = adSlot?.imgAcceptedHeight ?: getScreenHeight(activity)
+                    val slotId = serviceConfig?.adnNetworkSlotId
+                    adLogWithFrame(
+                        msgs = arrayOf(
+                            "加载GroMore自定义广告",
+                            "广告商:BeiZis",
+                            "广告ID:${slotId}"
+                        )
+                    )
+                    splash = SplashAd(activity, null, slotId, object : AdListener {
+                        override fun onAdLoaded() {
+                            adLogWithFrame(msgs = arrayOf( "GroMore-开屏-自定义BeiZis,加载成功"))
+                            if (biddingType == MediationConstant.AD_TYPE_CLIENT_BIDING) {
+                                var epcm = splash?.ecpm?.toDouble()
+                                epcm?.apply {
+                                    if (this < 0) {
+                                        epcm = 0.0
+                                    }
+                                    callLoadSuccess(epcm!!)
+                                }
+                            } else {
+                                callLoadSuccess()
+                            }
+                        }
+
+                        override fun onAdShown() {
+                            callSplashAdShow()
+                        }
+
+                        override fun onAdFailedToLoad(p0: Int) {
+                            adLogWithFrame(msgs = arrayOf( "GroMore-开屏-自定义BeiZis,加载失败-ErrorCode:${p0}"))
+                            callLoadFail(p0, "BeiZis load Failed ErrorCode:${p0}")
+                        }
+
+                        override fun onAdClosed() {
+                            callSplashAdDismiss()
+                        }
+
+                        override fun onAdTick(p0: Long) {
+                        }
+
+                        override fun onAdClicked() {
+                            callSplashAdClicked()
+                        }
+                    }, 5000)
+                    splash?.loadAd(splashWidthPx, (screenHeightPx - 100))
+                }
+            }
+        }
+    }
+
+
+    override fun showAd(container: ViewGroup?) {
+        ThreadUtils.runOnUIThreadByThreadPool {
+            if (splash != null) {
+                splash?.show(container)
+            }else{
+                callSplashAdSkip()
+            }
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        context?.let {
+            splash?.cancel(it)
+        }
+    }
+
+    override fun isReadyCondition(): AdIsReadyStatus {
+        /**
+         * 在子线程中进行广告是否可用的判断
+         */
+        val future: Future<AdIsReadyStatus> = ThreadUtils.runOnThreadPool(Callable {
+            if (splash != null) {
+                AdIsReadyStatus.AD_IS_READY
+            } else {
+                AdIsReadyStatus.AD_IS_NOT_READY
+            }
+        })
+        try {
+            val result = future[5000, TimeUnit.MILLISECONDS] //设置500毫秒的总超时,避免线程阻塞
+            return result ?: AdIsReadyStatus.AD_IS_NOT_READY
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return AdIsReadyStatus.AD_IS_READY
+    }
+}

+ 17 - 0
lib_ad_gromore_beizis/src/test/java/com/composition/android/ad/gromore/beizis/ExampleUnitTest.kt

@@ -0,0 +1,17 @@
+package com.composition.android.ad.gromore.beizis
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+    @Test
+    fun addition_isCorrect() {
+        assertEquals(4, 2 + 2)
+    }
+}

BIN
lib_ad_repository/admob/ad_admob_1.0.2_2023_05_23_release.aar


BIN
lib_ad_repository/app_lovin_max/ad_app_lovin_max_1.0.2_2023-05-23_release.aar


BIN
lib_ad_repository/core/ad_core_1.0.2_2023-05_23_release.aar


BIN
lib_ad_repository/gro_more/ad_gromore_1.0.2_2023-05-23_release.aar


BIN
lib_ad_repository/gro_more_beizis/ad_gromore_beizis_1.0.2_2023_05_24_release.aar


+ 0 - 67
lib_ad_scope/src/main/java/com/ad/scope/impl/ScopeInitialize.kt

@@ -1,67 +0,0 @@
-package com.ad.scope.impl
-
-import android.content.Context
-import com.beizi.fusion.BeiZis
-import com.composition.android.lib.ad.interfaces.Initialize
-
-/**
- * @author: HuBoWen
- * @date: 2023/4/25
- * @description:
- */
-class ScopeInitialize(var appId: String) : Initialize {
-    override fun init(context: Context) {
-        //建议开发者在此处调用初始化的方法,且此方法只需要一次调用
-        BeiZis.init(context, appId)
-        //如无需控制sdk对敏感权限的使用,建议使用不带BeiZiCustomController参数的初始化方法 自定义广告测试时使用20681  其它类型广告测试的时候使用20159
-        //关闭个性化推荐在SDK初始化之前调用
-//        BeiZis.setSupportPersonalized(false)
-        //设置隐私合规内容时,调用的初始化方法
-//        BeiZis.init(context, appId, object : BeiZiCustomController() {
-//            /**
-//             * 是否允许SDK主动使用地理位置信息
-//             *
-//             * @return true可以获取,false禁止获取。默认为true
-//             */
-//            override fun isCanUseLocation(): Boolean {
-//                return true
-//            }
-//
-//            /**
-//             * 是否允许SDK主动使用ACCESS_WIFI_STATE权限
-//             *
-//             * @return true可以使用,false禁止使用。默认为true
-//             */
-//            override fun isCanUseWifiState(): Boolean {
-//                return true
-//            }
-//
-//            /**
-//             * 是否允许SDK主动使用手机硬件参数,如:imei,imsi
-//             *
-//             * @return true可以使用,false禁止使用。默认为true
-//             */
-//            override fun isCanUsePhoneState(): Boolean {
-//                return true
-//            }
-//
-//            /**
-//             * 是否能使用Oaid
-//             *
-//             * @return true可以使用,false禁止使用。默认为true
-//             */
-//            override fun isCanUseOaid(): Boolean {
-//                return true
-//            }
-//
-//            /**
-//             * 是否能使用Gaid
-//             *
-//             * @return true可以使用,false禁止使用。默认为true
-//             */
-//            override fun isCanUseGaid(): Boolean {
-//                return true
-//            }
-//        })
-    }
-}

+ 0 - 78
lib_ad_scope/src/main/java/com/ad/scope/load/ScopeAdLoader.kt

@@ -1,78 +0,0 @@
-package com.ad.scope.load
-
-import android.app.Activity
-import android.content.Context
-import android.view.View
-import android.view.ViewGroup
-import com.ad.scope.load.request.ScopeAppOpenRequestImpl
-import com.beizi.fusion.SplashAd
-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 kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
-
-/**
- * @author: HuBoWen
- * @date: 2023/4/25
- * @description:
- */
-class ScopeAdLoader : AdLoader {
-    override val advertisers: Advertisers
-        get() = Advertisers.AdScope
-
-    override fun showSplashAd(activity: Activity, splashViewGroup: ViewGroup?, adResult: AdResult.Success, adListener: AdListener) {
-        if (adResult.adObject is SplashAd) {
-            (adResult.adObject as SplashAd).apply {
-                show(splashViewGroup)
-            }
-        }
-    }
-
-    override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
-        if (adUnitBean.isAvailable().not()) {
-            return AdResult.Fail(adUnitBean, msg = "AdUnitBean无效")
-        }
-        //获取到具体的广告格式加载类
-        val adFormatRequestImpl = withContext(Dispatchers.IO) {
-            when (adUnitBean.getAdType()) {
-                AdType.APP_OPEN -> ScopeAppOpenRequestImpl()
-                else -> null
-            }
-        }
-        return loadByStrategy(context, adUnitBean, adFormatRequestImpl)
-    }
-
-    override fun getBannerView(context: Context, adResult: AdResult.Success, viewHolder: BannerAdViewHolder): BasicAdView<*>? {
-        return null
-    }
-
-    override fun getNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder): View? {
-        return null
-    }
-
-    override fun destroyAd(adResult: AdResult) {
-        TODO("Not yet implemented")
-    }
-
-    override fun populateNativeAdView(context: Context, adResult: AdResult.Success, viewHolder: NativeAdViewHolder, advertisersContainerView: ViewGroup) {
-
-    }
-
-    override fun showInterstitialAd(activity: Activity, adResult: AdResult.Success, adListener: AdListener) {
-
-    }
-
-    override fun showRewardedAd(activity: Activity, adResult: AdResult.Success, adListener: AdListener) {
-
-    }
-
-    override fun showRewardedInterstitialAd(activity: Activity, adResult: AdResult.Success, adListener: AdListener) {
-
-    }
-
-    override fun showFullScreenAd(activity: Activity, adResult: AdResult.Success, adListener: AdListener) {
-        TODO("Not yet implemented")
-    }
-}

+ 0 - 62
lib_ad_scope/src/main/java/com/ad/scope/load/request/ScopeAppOpenRequestImpl.kt

@@ -1,62 +0,0 @@
-package com.ad.scope.load.request
-
-import android.content.Context
-import com.beizi.fusion.AdListener
-import com.beizi.fusion.SplashAd
-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.*
-import kotlinx.coroutines.suspendCancellableCoroutine
-
-/**
- * @author: HuBoWen
- * @date: 2023/4/25
- * @description:
- */
-class ScopeAppOpenRequestImpl : IAdFormatRequest {
-    override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
-        return suspendCancellableCoroutine {
-            var splash: SplashAd? = null
-            splash = SplashAd(context, null, adUnitBean.adUnitId, object : AdListener {
-                override fun onAdLoaded() {
-                    it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = splash, msg = "scope-开屏-加载成功"))
-                }
-
-                override fun onAdShown() {
-                    adLogWithFrame(msg = "scope onAdShown")
-                }
-
-                override fun onAdFailedToLoad(p0: Int) {
-                    adLogWithFrame(msg = "scope onAdFailedToLoad")
-                    it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = splash, msg = "scope-开屏-加载成功"))
-                }
-
-                override fun onAdClosed() {
-                    adLogWithFrame(msg = "scope onAdClosed")
-                }
-
-                override fun onAdTick(p0: Long) {
-                    adLogWithFrame(msg = "scope onAdTick")
-                }
-
-                override fun onAdClicked() {
-                    adLogWithFrame(msg = "scope onAdClicked")
-                }
-            }, 5000)
-
-            adLogWithFrame(msg = "scope onAdLoaded")
-            //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
-            val splashWidthDp: Float = getScreenWidthDp(context)
-            val splashWidthPx: Int = getScreenWidth(context)
-            val screenHeightPx: Int = getScreenHeight(context)
-            val screenHeightDp: Float = getScreenHeightDp(context)
-
-            // 开屏高度 = 屏幕高度 - 下方预留的高度,demo中是预留了屏幕高度的1/5,因此开屏高度传入 屏幕高度*4/5
-            val splashHeightDp: Float = screenHeightDp * 4 / 4f
-            val splashHeightPx: Int = (screenHeightPx * 4 / 4f).toInt()
-
-            splash.loadAd(splashWidthPx, (screenHeightPx - 100))
-        }
-    }
-}

+ 1 - 1
settings.gradle

@@ -38,4 +38,4 @@ include ':lib_ad_gromore'
 include ':lib_pdf_base'
 include ':lib_ad_applovinmax'
 include ':lib_material_tokens'
-include ':lib_ad_scope'
+include ':lib_ad_gromore_beizis'