diff --git a/app/build.gradle b/app/build.gradle index 27b3cf0786..01fe47170b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -344,6 +344,7 @@ dependencies { implementation(project(':feature:oaid')) implementation(project(':feature:floating-window')) implementation(project(':feature:beizi_startup_ad')) + implementation(project(':feature:csj_ad')) implementation(project(':feature:xapk-installer')) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dce30b4d55..4553831e2e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,6 +77,7 @@ androidx.compose.animation.core, androidx.constraintlayout.compose, androidx.compose.ui.test.manifest, + com.bytedance.sdk.openadsdk, androidx.compose.ui.tooling.preview" /> @@ -827,39 +828,6 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/gh/ad/AdDelegateHelper.kt b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt new file mode 100644 index 0000000000..fa55536a24 --- /dev/null +++ b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt @@ -0,0 +1,72 @@ +package com.gh.ad + +import android.app.Activity +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import com.alibaba.android.arouter.launcher.ARouter +import com.gh.gamecenter.common.constant.RouteConsts +import com.gh.gamecenter.core.provider.IAdProvider + +/** + * 广告代理类 + * + * 由它来分发功能实现到具体的 SDK + */ +object AdDelegateHelper { + + private var mActivatedSdkType = 1 + private var mAdImpl: IAdProvider? = null + + // TODO 记录广告相关的 config + + private const val TYPE_BEIZI = 0 + private const val TYPE_CSJ = 1 + + /** + * 初始化 + */ + fun init(context: Context) { + mAdImpl = when (mActivatedSdkType) { + TYPE_BEIZI -> ARouter.getInstance().build(RouteConsts.provider.beiziAd).navigation() as? IAdProvider + + TYPE_CSJ -> ARouter.getInstance().build(RouteConsts.provider.csjAd).navigation() as? IAdProvider + + else -> null + } + mAdImpl?.initSDK(context) + } + + fun shouldShowStartUpAd(): Boolean { + return true + } + + @JvmStatic + fun requestStartUpAd( + activity: Activity, + slotId: String, + adViewWidthInPx: Int, + adViewHeightInPx: Int, + adViewWidthInDp: Float, + adViewHeightInDp: Float, + startAdContainer: ViewGroup, + hideCallback: () -> Unit + ) { + mAdImpl?.requestStartUpAd( + activity, + slotId, + adViewWidthInPx, + adViewHeightInPx, + adViewWidthInDp, + adViewHeightInDp, + startAdContainer, + hideCallback + ) + } + + fun cancelStartUpAd(context: Context) { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index e9d49d13b2..6b2f7b3579 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -33,6 +33,7 @@ import android.text.Html; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; +import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; @@ -43,8 +44,8 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; -import com.alibaba.android.arouter.launcher.ARouter; import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.ad.AdDelegateHelper; import com.gh.common.DefaultUrlHandler; import com.gh.common.constant.Config; import com.gh.common.exposure.ExposureManager; @@ -77,7 +78,6 @@ import com.gh.gamecenter.common.base.fragment.ToolbarFragment; import com.gh.gamecenter.common.constant.CommonConsts; import com.gh.gamecenter.common.constant.Constants; import com.gh.gamecenter.common.constant.EntranceConsts; -import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.entity.LinkEntity; import com.gh.gamecenter.common.entity.NotificationUgc; import com.gh.gamecenter.common.entity.SuggestType; @@ -92,7 +92,7 @@ import com.gh.gamecenter.common.utils.ImageUtils; import com.gh.gamecenter.common.utils.NotificationHelper; import com.gh.gamecenter.common.utils.ShareUtils; import com.gh.gamecenter.core.AppExecutor; -import com.gh.gamecenter.core.provider.IStartUpAdProvider; +import com.gh.gamecenter.core.provider.IAdProvider; import com.gh.gamecenter.core.utils.ClassUtils; import com.gh.gamecenter.core.utils.DisplayUtils; import com.gh.gamecenter.core.utils.GsonUtils; @@ -192,8 +192,6 @@ public class MainActivity extends BaseActivity { private final Handler handler = new Handler(); public boolean showAd = false; // 是否显示广告 - private IStartUpAdProvider mStartUpAdProvider; - @Override protected void onCreate(Bundle savedInstanceState) { showAd = getIntent().getBooleanExtra(SHOW_AD, false) && savedInstanceState == null; @@ -475,7 +473,7 @@ public class MainActivity extends BaseActivity { protected void onDestroy() { super.onDestroy(); - if (mStartUpAdProvider != null) mStartUpAdProvider.cancelStartUpAd(this); + AdDelegateHelper.INSTANCE.cancelStartUpAd(this); handler.removeCallbacksAndMessages(null); releaseExoSourceCache(); @@ -518,8 +516,7 @@ public class MainActivity extends BaseActivity { } private void initStartUpAd() { - mStartUpAdProvider = (IStartUpAdProvider) ARouter.getInstance().build(RouteConsts.provider.adSdk).navigation(); - if (mStartUpAdProvider != null && mStartUpAdProvider.shouldEnableSDK(HaloApp.getInstance().getChannel())) { + if (AdDelegateHelper.INSTANCE.shouldShowStartUpAd()) { initSDKStartUpAd(); } else { observeStartUpAd(); @@ -618,7 +615,7 @@ public class MainActivity extends BaseActivity { if (startSdkAdContainer != null) { startSdkAdContainer.setVisibility(View.GONE); ExtensionsKt.removeFromParent(startSdkAdContainer); - if (mStartUpAdProvider != null) mStartUpAdProvider.cancelStartUpAd(this); + AdDelegateHelper.INSTANCE.cancelStartUpAd(this); } checkDialog(); } @@ -678,15 +675,27 @@ public class MainActivity extends BaseActivity { } private void initSDKStartUpAd() { - View startAdContainer = findViewById(R.id.sdkStartAdContainer); + ViewGroup startAdContainer = findViewById(R.id.sdkStartAdContainer); startAdContainer.setVisibility(View.VISIBLE); FrameLayout adsFl = findViewById(R.id.adsFl); - if (mStartUpAdProvider != null) { - mStartUpAdProvider.initStartUpAd(startAdContainer, adsFl, showAd, () -> { - hideStartUpAd(); - return null; - }); - } + + float screenWidthInDp = DisplayUtils.getScreenWidth(this); + float screenHeightInDp = DisplayUtils.getScreenHeight(this); + int screenWidthInPx = DisplayUtils.px2dip(this, screenWidthInDp); + int screenHeightInPx = DisplayUtils.px2dip(this, screenHeightInDp); + + AdDelegateHelper.requestStartUpAd( + this, + "888381490", + screenWidthInPx, + screenHeightInPx, + screenWidthInDp, + screenHeightInDp, + startAdContainer, + () -> { + hideStartUpAd(); + return null; + }); } private void showStartUp(StartupAdEntity ad) { diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt index f9cf6cf817..51d19222ce 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt @@ -19,6 +19,7 @@ import androidx.viewpager.widget.ViewPager import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.launcher.ARouter import com.g00fy2.versioncompare.Version +import com.gh.ad.AdDelegateHelper import com.gh.common.dialog.NewPrivacyPolicyDialogFragment import com.gh.common.util.* import com.gh.common.util.GameSubstituteRepositoryHelper.updateGameSubstituteRepository @@ -33,7 +34,6 @@ import com.gh.gamecenter.common.tracker.TrackerLogger import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.provider.IAppProvider import com.gh.gamecenter.core.provider.IPackageUtilsProvider -import com.gh.gamecenter.core.provider.IStartUpAdProvider import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.utils.* import com.gh.gamecenter.entity.PrivacyPolicyEntity @@ -64,9 +64,6 @@ class SplashScreenActivity : BaseActivity() { private var mStartMainActivityDirectly = false // 是否不需要用户点击立即体验就直接跳转首页 private var mViewModel: SplashScreenViewModel? = null private var mShouldPrefetchData = true - private val mStartUpAdProvider by lazy { - ARouter.getInstance().build(RouteConsts.provider.adSdk).navigation() as? IStartUpAdProvider - } private val mPermissions = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, @@ -289,7 +286,8 @@ class SplashScreenActivity : BaseActivity() { overridePendingTransition(0, 0) startActivity(intent) doFlavorInit() - initStartUpAdSDK() + // 初始化广告 SDK + AdDelegateHelper.init(HaloApp.getInstance()) logAppLaunch() finish() } @@ -302,14 +300,6 @@ class SplashScreenActivity : BaseActivity() { } } - private fun initStartUpAdSDK() { - mStartUpAdProvider?.run { - if (shouldEnableSDK(HaloApp.getInstance().channel)) { - initSDK(applicationContext) - } - } - } - private fun getGitLogString(): String { if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) { val stringBuilder = StringBuilder() diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt index 184e6e93b0..de4986423d 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt @@ -27,7 +27,7 @@ import com.gh.gamecenter.common.utils.viewModelProviderFromParent import com.gh.gamecenter.common.view.OffsetLinearLayoutManager import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.provider.IFloatingWindowProvider -import com.gh.gamecenter.core.provider.IStartUpAdProvider +import com.gh.gamecenter.core.provider.IAdProvider import com.gh.gamecenter.core.utils.MD5Utils import com.gh.gamecenter.core.utils.MtaHelper import com.gh.gamecenter.core.utils.SPUtils @@ -105,7 +105,7 @@ class HomeFragment : LazyFragment() { } mListAdapter.setLoadStatus(it) val startUpAdProvider = - ARouter.getInstance().build(RouteConsts.provider.adSdk).navigation() as? IStartUpAdProvider + ARouter.getInstance().build(RouteConsts.provider.beiziAd).navigation() as? IAdProvider val startAdContainerView = requireActivity().findViewById(if (startUpAdProvider != null) R.id.sdkStartAdContainer else R.id.startAdContainer) if (it == LoadStatus.INIT_LOADED && startAdContainerView == null) { @@ -224,7 +224,7 @@ class HomeFragment : LazyFragment() { */ private fun listenStartAdViewRemoved() { val startUpAdProvider = - ARouter.getInstance().build(RouteConsts.provider.adSdk).navigation() as? IStartUpAdProvider + ARouter.getInstance().build(RouteConsts.provider.beiziAd).navigation() as? IAdProvider val startAdContainerView = requireActivity().findViewById(if (startUpAdProvider != null) R.id.sdkStartAdContainer else R.id.startAdContainer) val parentView = startAdContainerView?.parent as? ViewGroup diff --git a/build.gradle b/build.gradle index be77d21c53..2b52d75151 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ allprojects { maven { url 'https://jitpack.io' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases/' } maven { url 'https://artifact.bytedance.com/repository/Volcengine/'} + maven { url 'https://artifact.bytedance.com/repository/pangle' } } } diff --git a/dependencies.gradle b/dependencies.gradle index fc7c74f55e..1fa84ef7e6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -135,4 +135,6 @@ ext { sensorsDataVersion = "6.6.8" documentfile = "1.0.1" + + csjVersion = "5.4.1.6" } \ No newline at end of file diff --git a/feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/StartUpAdProviderImpl.kt b/feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/BeiziAdProviderImpl.kt similarity index 51% rename from feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/StartUpAdProviderImpl.kt rename to feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/BeiziAdProviderImpl.kt index 23c544cf48..37e3ad42a3 100644 --- a/feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/StartUpAdProviderImpl.kt +++ b/feature/beizi_startup_ad/src/main/java/com/gh/gamecenter/beiziad/BeiziAdProviderImpl.kt @@ -1,20 +1,31 @@ package com.gh.gamecenter.beiziad +import android.app.Activity import android.content.Context import android.view.View +import android.view.ViewGroup import android.widget.FrameLayout import com.alibaba.android.arouter.facade.annotation.Route import com.gh.gamecenter.common.constant.RouteConsts -import com.gh.gamecenter.core.provider.IStartUpAdProvider +import com.gh.gamecenter.core.provider.IAdProvider -@Route(path = RouteConsts.provider.adSdk, name = "开屏广告暴露服务") -class StartUpAdProviderImpl : IStartUpAdProvider { +@Route(path = RouteConsts.provider.beiziAd, name = "beizi广告暴露服务") +class BeiziAdProviderImpl : IAdProvider { override fun initSDK(context: Context) { BeiziAdHelper.initBeiziSDK(context) } - override fun initStartUpAd(startAdContainer: View, adsFl: FrameLayout, showAd: Boolean, hideCallback: () -> Unit) { - BeiziAdHelper.initBeiziStartUpAd(startAdContainer, adsFl, showAd, hideCallback) + override fun requestStartUpAd( + activity: Activity, + slotId: String, + adViewWidthInPx: Int, + adViewHeightInPx: Int, + adViewWidthInDp: Float, + adViewHeightInDp: Float, + startAdContainer: ViewGroup, + hideCallback: () -> Unit + ) { +// BeiziAdHelper.initBeiziStartUpAd(startAdContainer, adsFl, showAd, hideCallback) } override fun cancelStartUpAd(context: Context) { diff --git a/feature/csj_ad/.gitignore b/feature/csj_ad/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/feature/csj_ad/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/csj_ad/build.gradle b/feature/csj_ad/build.gradle new file mode 100644 index 0000000000..525b502817 --- /dev/null +++ b/feature/csj_ad/build.gradle @@ -0,0 +1,58 @@ +apply plugin: 'com.android.library' +apply plugin: 'org.jetbrains.kotlin.android' +apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + + defaultConfig { + minSdk rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName + + buildConfigField "String", "API_HOST", "\"${API_HOST}\"" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + kapt { + arguments { + arg("AROUTER_MODULE_NAME", project.name) + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + buildTypes { + debug { + buildConfigField "String", "DEV_API_HOST", "\"${DEV_API_HOST}\"" + } + + release { + minifyEnabled false + consumerProguardFiles 'proguard-rules.pro' + + buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" + } + } + +} + +dependencies { + implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') + kapt "com.alibaba:arouter-compiler:$arouterVersion" + + implementation(project(path: ":module_common")) { + exclude group: 'androidx.swiperefreshlayout' + } + implementation "com.pangle.cn:ads-sdk-pro:$csjVersion" +} \ No newline at end of file diff --git a/feature/csj_ad/proguard-rules.pro b/feature/csj_ad/proguard-rules.pro new file mode 100644 index 0000000000..d225f396c5 --- /dev/null +++ b/feature/csj_ad/proguard-rules.pro @@ -0,0 +1,27 @@ +# 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 + +# 倍孜广告SDK混淆 +-dontwarn com.beizi.fusion.** +-dontwarn com.beizi.ad.** +-keep class com.beizi.fusion.** {*; } +-keep class com.beizi.ad.** {*; } \ No newline at end of file diff --git a/feature/csj_ad/src/main/AndroidManifest.xml b/feature/csj_ad/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..cbd8f69c43 --- /dev/null +++ b/feature/csj_ad/src/main/AndroidManifest.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdHelper.kt b/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdHelper.kt new file mode 100644 index 0000000000..97c9e80c96 --- /dev/null +++ b/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdHelper.kt @@ -0,0 +1,124 @@ +package com.gh.gamecenter.csj + +import android.app.Activity +import android.content.Context +import android.view.ViewGroup +import com.bytedance.sdk.openadsdk.* +import com.bytedance.sdk.openadsdk.CSJSplashAd.SplashAdListener +import com.bytedance.sdk.openadsdk.TTAdNative.CSJSplashAdListener +import com.bytedance.sdk.openadsdk.TTAdSdk.InitCallback +import com.gh.gamecenter.common.utils.PackageFlavorHelper +import com.lightgame.utils.Utils + +object CsjAdHelper { + + const val TAG = "CsjAdHelper" + + fun init(context: Context) { + //强烈建议在应用对应的Application#onCreate()方法中调用,避免出现content为null的异常 + TTAdSdk.init( + context, + TTAdConfig.Builder() + .appId("5410486")// xxxxxxx为穿山甲媒体平台注册的应用ID + .useTextureView(true) // 默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景,可以使用TextureView + .appName("光环助手") + .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题 + .allowShowNotify(true) // 是否允许sdk展示通知栏提示,若设置为false则会导致通知栏不显示下载进度,存在违规风险,请勿随意更改 + .debug(PackageFlavorHelper.IS_TEST_FLAVOR) // 测试阶段打开,可以通过日志排查问题,上线时去除该调用 + .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) // 允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗,弹窗中会披露应用信息 + .supportMultiProcess(false) // 是否支持多进程,true支持 + .asyncInit(true) // 是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~ + .build(), + object : InitCallback { + override fun success() { + Utils.log(TAG, "穿山甲初始化成功") + } + + override fun fail(p0: Int, p1: String?) { + Utils.log(TAG, "穿山甲初始化失败, $p0 $p1") + } + }) + //如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告SDK的content + //if (PROCESS_NAME_XXXX.equals(processName)) { + // TTAdSdk.init(context, config); + //} + } + + /** + * 请求启动广告 + */ + fun requestStartUpAD( + activity: Activity, + slotId: String, + adViewWidthInPx: Int, + adViewHeightInPx: Int, + adViewWidthInDp: Float, + adViewHeightInDp: Float, + startAdContainer: ViewGroup, + hideCallback: () -> Unit + ) { + val mTTAdNative = TTAdSdk.getAdManager().createAdNative(activity) + + val adSlot = AdSlot.Builder() + .setCodeId(slotId) + //不区分渲染方式,要求开发者同时设置setImageAcceptedSize(单位:px)和setExpressViewAcceptedSize(单位:dp )接口,不同时设置可能会导致展示异常。 + .setImageAcceptedSize(adViewWidthInPx, adViewHeightInPx) + .setExpressViewAcceptedSize(adViewWidthInDp, adViewHeightInDp) + .setAdLoadType(TTAdLoadType.LOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略 + .build() + + + mTTAdNative.loadSplashAd(adSlot, object : CSJSplashAdListener { + override fun onSplashLoadSuccess() { + Utils.log(TAG, "开屏广告加载成功") + } + + override fun onSplashLoadFail(p0: CSJAdError?) { + Utils.log(TAG, "开屏广告加载失败") + hideCallback.invoke() + } + + override fun onSplashRenderSuccess(p0: CSJSplashAd?) { + Utils.log(TAG, "开屏广告渲染成功 $p0") + if (p0 == null) { + hideCallback.invoke() + return + } + if (!activity.isFinishing) { + startAdContainer.removeAllViews() + p0.setSplashAdListener(object : SplashAdListener { + override fun onSplashAdShow(p0: CSJSplashAd?) { + Utils.log(TAG, "显示开屏广告") + } + + override fun onSplashAdClick(p0: CSJSplashAd?) { + Utils.log(TAG, "点击开屏广告") + } + + override fun onSplashAdClose(ad: CSJSplashAd?, closeType: Int) { + if (closeType == CSJSplashCloseType.CLICK_SKIP) { + Utils.log(TAG, "开屏广告点击跳过") + } else if (closeType == CSJSplashCloseType.COUNT_DOWN_OVER) { + Utils.log(TAG, "开屏广告点击倒计时结束") + } else if (closeType == CSJSplashCloseType.CLICK_JUMP) { + Utils.log(TAG, "点击跳转") + } + hideCallback.invoke() + } + }) + // 把SplashView 添加到ViewGroup中,注意开屏广告view:width =屏幕宽;height >=75%屏幕高 + p0.showSplashView(startAdContainer) + } else { + // 开发者处理跳转到APP主页面逻辑 + hideCallback.invoke() + } + } + + override fun onSplashRenderFail(p0: CSJSplashAd?, p1: CSJAdError?) { + Utils.log(TAG, "开屏广告渲染失败 $p0") + hideCallback.invoke() + } + }, 3500) + } + +} \ No newline at end of file diff --git a/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdProviderImpl.kt b/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdProviderImpl.kt new file mode 100644 index 0000000000..4d8bfa04f5 --- /dev/null +++ b/feature/csj_ad/src/main/java/com/gh/gamecenter/csj/CsjAdProviderImpl.kt @@ -0,0 +1,50 @@ +package com.gh.gamecenter.csj + +import android.app.Activity +import android.content.Context +import android.view.ViewGroup +import com.alibaba.android.arouter.facade.annotation.Route +import com.gh.gamecenter.common.constant.RouteConsts +import com.gh.gamecenter.core.provider.IAdProvider + +@Route(path = RouteConsts.provider.csjAd, name = "csj广告暴露服务") +class CsjAdProviderImpl : IAdProvider { + override fun initSDK(context: Context) { + CsjAdHelper.init(context) + } + + override fun requestStartUpAd( + activity: Activity, + slotId: String, + adViewWidthInPx: Int, + adViewHeightInPx: Int, + adViewWidthInDp: Float, + adViewHeightInDp: Float, + startAdContainer: ViewGroup, + hideCallback: () -> Unit + ) { + CsjAdHelper.requestStartUpAD( + activity, + slotId, + adViewWidthInPx, + adViewHeightInPx, + adViewWidthInDp, + adViewHeightInDp, + startAdContainer, + hideCallback + ) + } + + override fun cancelStartUpAd(context: Context) { + + } + + override fun shouldEnableSDK(channel: String): Boolean { + return true + } + + override fun init(context: Context?) { + // do nothing + } + +} \ No newline at end of file diff --git a/feature/csj_ad/src/main/res/xml/file_paths.xml b/feature/csj_ad/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000000..b3856b09bd --- /dev/null +++ b/feature/csj_ad/src/main/res/xml/file_paths.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/module_common/src/main/java/com/gh/gamecenter/common/constant/RouteConsts.kt b/module_common/src/main/java/com/gh/gamecenter/common/constant/RouteConsts.kt index 1c349646b8..7542a9b0b7 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/constant/RouteConsts.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/constant/RouteConsts.kt @@ -96,7 +96,8 @@ object RouteConsts { const val sensors = "/sensors/sensors" - const val adSdk = "/adSdk/adSdk" + const val beiziAd = "/beizi/beizi" + const val csjAd = "/csj/csj" const val oaid = "/oaid/oaid" diff --git a/module_core/src/main/java/com/gh/gamecenter/core/provider/IAdProvider.kt b/module_core/src/main/java/com/gh/gamecenter/core/provider/IAdProvider.kt new file mode 100644 index 0000000000..292c97405f --- /dev/null +++ b/module_core/src/main/java/com/gh/gamecenter/core/provider/IAdProvider.kt @@ -0,0 +1,26 @@ +package com.gh.gamecenter.core.provider + +import android.app.Activity +import android.content.Context +import android.view.ViewGroup +import com.alibaba.android.arouter.facade.template.IProvider + +interface IAdProvider : IProvider { + + fun initSDK(context: Context) + + fun requestStartUpAd( + activity: Activity, + slotId: String, + adViewWidthInPx: Int, + adViewHeightInPx: Int, + adViewWidthInDp: Float, + adViewHeightInDp: Float, + startAdContainer: ViewGroup, + hideCallback: () -> Unit + ) + + fun cancelStartUpAd(context: Context) + + fun shouldEnableSDK(channel: String): Boolean +} \ No newline at end of file diff --git a/module_core/src/main/java/com/gh/gamecenter/core/provider/IStartUpAdProvider.kt b/module_core/src/main/java/com/gh/gamecenter/core/provider/IStartUpAdProvider.kt deleted file mode 100644 index 6c4894e383..0000000000 --- a/module_core/src/main/java/com/gh/gamecenter/core/provider/IStartUpAdProvider.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.gh.gamecenter.core.provider - -import android.content.Context -import android.view.View -import android.widget.FrameLayout -import com.alibaba.android.arouter.facade.template.IProvider - -interface IStartUpAdProvider : IProvider { - - fun initSDK(context: Context) - - fun initStartUpAd(startAdContainer: View, adsFl: FrameLayout, showAd: Boolean, hideCallback: () -> Unit) - - fun cancelStartUpAd(context: Context) - - fun shouldEnableSDK(channel: String): Boolean -} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 37276a83e3..b1ab1ad1d8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,6 +17,7 @@ include ':feature:vpn' include ':feature:pkg' include ':feature:floating-window' include ':feature:beizi_startup_ad' +include ':feature:csj_ad' include ':feature:oaid_lib' include ':feature:oaid' include ':feature:xapk-installer'