Commit d630076a authored by wanglei's avatar wanglei

...模块化

parent 3690bb45
......@@ -11,7 +11,10 @@ import androidx.activity.addCallback
import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.didi.drouter.api.DRouter
import com.koko.batteryinfo.databinding.ActivityBatteryInfoBinding
import com.koko.router.ad.NativeBatteryType
import com.koko.router.ad.NativeService
import java.math.BigDecimal
import java.math.RoundingMode
......@@ -29,7 +32,7 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfoBinding>() {
useDefaultImmersive()
initView()
// AdmobNativeUtils.showNativeAd(this, binding.flAdNative, R.layout.layout_admob_document_in)
showNative()
// if (AdmobHelper.isShowOpenDocumentInter()) {
// AdmobInterstitialUtils.showInterstitialAd(this) {
......@@ -41,6 +44,11 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfoBinding>() {
}
private fun showNative() {
val nativeService = DRouter.build(NativeService::class.java).getService()
nativeService.showNative(this, binding.flAd, NativeBatteryType)
}
override fun initView() {
registerReceiver()
onBackPressedDispatcher.addCallback {
......
......@@ -283,12 +283,11 @@
<FrameLayout
android:id="@+id/fl_ad_native"
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="10dp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/ll_battery_status">
<ImageView
......@@ -305,7 +304,7 @@
android:layout_marginTop="11dp"
android:layout_marginEnd="15dp"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/fl_ad_native">
app:layout_constraintTop_toBottomOf="@id/flAd">
<LinearLayout
android:id="@+id/llTime"
......
......@@ -39,4 +39,6 @@ dependencies {
androidTestImplementation(libs.androidx.espresso.core)
api(libs.drouter.api)
api(libs.drouter.api.page)
api(libs.drouter.api.process)
}
\ No newline at end of file
package com.koko.router.ad
import android.app.Activity
import android.widget.FrameLayout
const val NativeBatteryType: String = "NativeBatteryType"
interface NativeService {
fun showNative(activity: Activity, flAd: FrameLayout, nativeType: String)
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ plugins {
alias(libs.plugins.kotlin.android)
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
id("com.didi.drouter")
}
android {
......
......@@ -30,6 +30,7 @@ import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.SolarEngineUtils.initSolarEngine
import com.base.appzxhy.utils.SolarEngineUtils.solarkey
import com.didi.drouter.api.DRouter
import com.facebook.FacebookSdk
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.gson.Gson
......@@ -67,6 +68,9 @@ class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
appContext = this
DRouter.init(this)
initUUid()
initGid()
initApp()
......
......@@ -2,7 +2,9 @@ package com.base.appzxhy.ads
import android.app.Activity
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.annotation.LayoutRes
import com.applovin.sdk.AppLovinMediationProvider
import com.applovin.sdk.AppLovinSdk
......@@ -27,6 +29,7 @@ import com.base.appzxhy.utils.ToastUtils.toast
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.android.gms.ads.initialization.AdapterStatus
import com.google.android.gms.ads.nativead.NativeAdView
import java.util.Collections
import java.util.concurrent.Executors
......@@ -212,11 +215,12 @@ object AdsMgr {
/**
* 展示原生广告
*
* @param nativeView 需要展示广告的布局容器
* @param layout 原生广告布局 ,这里传入的layout要和com.example.mydemo.strategy.ads.admob.NativeView里的id一致
* @param parent 需要展示原生广告的布局容器
* @param layout Admob原生根布局必须为 NativeAdView
*/
fun showNative(
nativeView: NativeParentView,
activity: Activity,
parent: FrameLayout,
@LayoutRes layout: Int,
nativeCallBack: ((Any?) -> Unit)? = null
) {
......@@ -227,11 +231,15 @@ object AdsMgr {
if (!isAdmobInit) return
val from = activity::class.java.simpleName
if (adsConfigBean.adSwitch) {
adNativeMgr.show(AdmobEvent("nativeAd", "nativeAd"), nativeView, layout, nativeCallBack)
val nativeView = LayoutInflater.from(parent.context).inflate(layout, parent, false) as NativeAdView
adNativeMgr.show(AdmobEvent("nativeAd", from), parent, nativeView, nativeCallBack)
} else {
maxNativeMgr.show(AdMaxEvent("nativeAd", "nativeAd"), nativeView, layout, nativeCallBack)
// maxNativeMgr.show(AdMaxEvent("nativeAd", "nativeAd"), nativeParent, layout, nativeCallBack)
}
}
......
package com.base.appzxhy.ads.admob
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import com.base.appzxhy.GlobalConfig
import com.base.appzxhy.R
import com.base.appzxhy.ads.AdsType
import com.base.appzxhy.ads.LimitUtils
import com.base.appzxhy.ads.NativeParentView
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdLoader
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.nativead.NativeAdOptions
import com.google.android.gms.ads.nativead.NativeAdView
import java.util.concurrent.ConcurrentLinkedDeque
/**
......@@ -29,8 +37,8 @@ class AdNativeMgr {
private fun loadAd(
admobEvent: AdmobEvent,
parent: NativeParentView,
layout: Int
parent: FrameLayout,
nativeAdView: NativeAdView
) {
admobEvent.adPulStart()
......@@ -47,7 +55,7 @@ class AdNativeMgr {
nativeAd.setOnPaidEventListener(AdmobEvent.EventOnPaidEventListener(nativeAd))
admobEvent.pullAd(nativeAd.responseInfo)
show(admobEvent, parent, layout)
show(admobEvent, parent, nativeAdView)
}.withAdListener(object : AdListener() {
......@@ -72,8 +80,8 @@ class AdNativeMgr {
fun show(
admobEvent: AdmobEvent,
parent: NativeParentView,
layout: Int,
nativeParent: FrameLayout,
nativeAdView: NativeAdView,
nativeCallBack: ((Any?) -> Unit)? = null
) {
......@@ -88,16 +96,57 @@ class AdNativeMgr {
if (nativeAd == null || !adAvailable()) {
//缓存过期了就清空
cacheItems.clear()
loadAd(admobEvent, parent, layout)
loadAd(admobEvent, nativeParent, nativeAdView)
return
}
nativeCallBack?.invoke(nativeAd)
parent.setNativeAd(nativeAd, layout)
//添加原生到父布局
nativeParent.removeAllViews()
nativeAdView.bindNativeAd(nativeAd)
nativeParent.addView(nativeAdView)
nativeParent.isVisible = true
admobEvent.showAd(nativeAd.responseInfo)
}
private fun NativeAdView.bindNativeAd(nativeAd: NativeAd?) {
nativeAd ?: return
mediaView = findViewById(R.id.ad_media)
headlineView = findViewById(R.id.ad_headline)
bodyView = findViewById(R.id.ad_body)
callToActionView = findViewById(R.id.ad_call_to_action)
iconView = findViewById(R.id.ad_app_icon)
(headlineView as TextView?)?.text = nativeAd.headline
mediaView?.mediaContent = nativeAd.mediaContent
if (nativeAd.body == null) {
bodyView?.visibility = View.INVISIBLE
} else {
bodyView?.visibility = View.VISIBLE
(bodyView as TextView?)?.text = nativeAd.body
}
if (nativeAd.callToAction == null) {
callToActionView?.visibility = View.INVISIBLE
} else {
callToActionView?.visibility = View.VISIBLE
(callToActionView as Button?)?.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
iconView?.visibility = View.GONE
} else {
(iconView as ImageView?)?.setImageDrawable(
nativeAd.icon?.drawable
)
iconView?.visibility = View.VISIBLE
}
setNativeAd(nativeAd)
}
private fun adAvailable(): Boolean {
return ((System.currentTimeMillis() - lastTime) / 1000 / 60).toInt() < 30
}
}
\ No newline at end of file
package com.base.appzxhy.drouterimp
import android.app.Activity
import android.widget.FrameLayout
import com.base.appzxhy.R
import com.base.appzxhy.ads.AdsMgr
import com.base.appzxhy.utils.LogEx
import com.didi.drouter.annotation.Service
import com.koko.router.ad.NativeBatteryType
import com.koko.router.ad.NativeService
@Service(function = [NativeService::class])
class NativeServiceImp : NativeService {
private val TAG = "NativeServiceImp"
override fun showNative(activity: Activity, flAd: FrameLayout, nativeType: String) {
LogEx.logDebug(TAG, "activity=${activity::class.java.simpleName}")
val layout = when (nativeType) {
NativeBatteryType -> R.layout.layout_admob_native_custom
else -> R.layout.layout_admob_native_custom
}
AdsMgr.showNative(activity, flAd, layout)
}
}
\ No newline at end of file
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nativeAdView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
......
......@@ -22,7 +22,8 @@ pangle = "6.3.0.4.0"
drouterApi = "2.4.6"
drouterPlugin = "1.4.0"
drouterApiPage = "1.0.0"
drouterApiProcess = "1.0.0"
[libraries]
......@@ -55,6 +56,8 @@ applovin_pangle = { group = "com.applovin.mediation", name = "bytedance-adapter"
drouter-api = { module = "io.github.didi:drouter-api", version.ref = "drouterApi" }
drouter-plugin = { module = "io.github.didi:drouter-plugin", version.ref = "drouterPlugin" }
drouter-api-page = { module = "io.github.didi:drouter-api-page", version.ref = "drouterApiPage" }
drouter-api-process = { module = "io.github.didi:drouter-api-process", version.ref = "drouterApiProcess" }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment