Commit 737e29b8 authored by maxiaoliang's avatar maxiaoliang

同步广告需求

parent e0c362aa
...@@ -2,8 +2,11 @@ package com.test.easy.easycleanerjunk.helps.ads ...@@ -2,8 +2,11 @@ package com.test.easy.easycleanerjunk.helps.ads
import android.app.Activity import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import com.applovin.mediation.MaxAd import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdListener import com.applovin.mediation.MaxAdListener
import com.applovin.mediation.MaxAdRevenueListener import com.applovin.mediation.MaxAdRevenueListener
...@@ -13,6 +16,7 @@ import com.applovin.mediation.ads.MaxInterstitialAd ...@@ -13,6 +16,7 @@ import com.applovin.mediation.ads.MaxInterstitialAd
import com.applovin.mediation.nativeAds.MaxNativeAdListener import com.applovin.mediation.nativeAds.MaxNativeAdListener
import com.applovin.mediation.nativeAds.MaxNativeAdLoader import com.applovin.mediation.nativeAds.MaxNativeAdLoader
import com.applovin.mediation.nativeAds.MaxNativeAdView import com.applovin.mediation.nativeAds.MaxNativeAdView
import com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
import com.facebook.appevents.AppEventsConstants import com.facebook.appevents.AppEventsConstants
import com.facebook.appevents.AppEventsLogger import com.facebook.appevents.AppEventsLogger
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
...@@ -31,9 +35,6 @@ object MaxAdUtils { ...@@ -31,9 +35,6 @@ object MaxAdUtils {
private var openLoadTime = Long.MAX_VALUE private var openLoadTime = Long.MAX_VALUE
private var interLoadTime = Long.MAX_VALUE private var interLoadTime = Long.MAX_VALUE
private var nativeLoadTime = Long.MAX_VALUE private var nativeLoadTime = Long.MAX_VALUE
private var openAdUnit = "1fce760852e47224"
private var interAdUnit = "636e57ec33ac5698"
private var naviteAdUnit = "63d874bafb4c4841"
var mOpenAd: MaxAppOpenAd? = null var mOpenAd: MaxAppOpenAd? = null
var isBlack = false var isBlack = false
get() { get() {
...@@ -43,7 +44,8 @@ object MaxAdUtils { ...@@ -43,7 +44,8 @@ object MaxAdUtils {
field = value field = value
SPUtils.getInstance().put("isBlack", value, true) SPUtils.getInstance().put("isBlack", value, true)
} }
fun loadAppOpenAd(skip: Boolean = false, activity: Activity,onLoad: (() -> Unit)? = null) {
fun loadAppOpenAd(skip: Boolean = false, activity: Activity, onLoad: (() -> Unit)? = null) {
if (isBlack) { if (isBlack) {
EventUtils.event("blacklist_filter") EventUtils.event("blacklist_filter")
onLoad?.invoke() onLoad?.invoke()
...@@ -57,8 +59,7 @@ object MaxAdUtils { ...@@ -57,8 +59,7 @@ object MaxAdUtils {
onLoad?.invoke() onLoad?.invoke()
return return
} }
openAdUnit = ConfigHelper.openMaxId mOpenAd = MaxAppOpenAd(ConfigHelper.openMaxId, BaseApplication.context)
mOpenAd = MaxAppOpenAd(openAdUnit, BaseApplication.context)
if (isOpenAdLoaded() || skip) { if (isOpenAdLoaded() || skip) {
onLoad?.invoke() onLoad?.invoke()
return return
...@@ -76,24 +77,22 @@ object MaxAdUtils { ...@@ -76,24 +77,22 @@ object MaxAdUtils {
maxAdPullReport(p0, "openAd", reqId = reqId) maxAdPullReport(p0, "openAd", reqId = reqId)
} }
override fun onAdDisplayed(p0: MaxAd) { override fun onAdDisplayed(p0: MaxAd) {}
}
override fun onAdHidden(p0: MaxAd) {} override fun onAdHidden(p0: MaxAd) {}
override fun onAdClicked(p0: MaxAd) {} override fun onAdClicked(p0: MaxAd) {}
override fun onAdLoadFailed(p0: String, p1: MaxError) { override fun onAdLoadFailed(p0: String, p1: MaxError) {
mOpenAd=null mOpenAd = null
maxAdPullReport(null, "AppOpenAd", p1.message) maxAdPullReport(null, "AppOpenAd", p1.message)
// Log.e("MXL", "onAdLoadFailed: " + p1) Log.e("MXL", "onAdLoadFailed: " + p1.message)
AdDisplayUtils.getInstance().incrementAdRequestFailCount() AdDisplayUtils.getInstance().incrementAdRequestFailCount()
if(ConfigHelper.openAdLoadFail==1){ if (ConfigHelper.openAdLoadFail == 1) {
showInterstitialAd(activity){ showInterstitialAd(activity) {
onLoad?.invoke() onLoad?.invoke()
} }
}else{ } else {
onLoad?.invoke() onLoad?.invoke()
} }
} }
...@@ -143,7 +142,7 @@ object MaxAdUtils { ...@@ -143,7 +142,7 @@ object MaxAdUtils {
override fun onAdHidden(p0: MaxAd) { override fun onAdHidden(p0: MaxAd) {
onHidden?.invoke() onHidden?.invoke()
mOpenAd = null mOpenAd = null
// loadAppOpenAd() // loadAppOpenAd()
} }
override fun onAdClicked(p0: MaxAd) { override fun onAdClicked(p0: MaxAd) {
...@@ -162,7 +161,6 @@ object MaxAdUtils { ...@@ -162,7 +161,6 @@ object MaxAdUtils {
obj.put("reason", p1.message) obj.put("reason", p1.message)
obj.put("ad_unit", "openAd") obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj) EventUtils.event("ad_show_error", ext = obj)
// Log.e("MXL", "onAdDisplayFailed: "+p1.message )
} }
}) })
if (isOpenAdLoaded()) { if (isOpenAdLoaded()) {
...@@ -194,15 +192,6 @@ object MaxAdUtils { ...@@ -194,15 +192,6 @@ object MaxAdUtils {
onLoad?.invoke() onLoad?.invoke()
return return
} }
interAdUnit = ConfigHelper.interMaxId
var hasDone = false
activity.window.decorView.postDelayed(Runnable {
if (hasDone) {
return@Runnable
}
hasDone = true
onLoad?.invoke()
}, 15000)
val reqId = UUID.randomUUID().toString() val reqId = UUID.randomUUID().toString()
val obj = JSONObject() val obj = JSONObject()
obj.put("req_id", reqId) obj.put("req_id", reqId)
...@@ -210,18 +199,16 @@ object MaxAdUtils { ...@@ -210,18 +199,16 @@ object MaxAdUtils {
obj.put("mediation", "applovin") obj.put("mediation", "applovin")
obj.put("from", activity.javaClass.simpleName) obj.put("from", activity.javaClass.simpleName)
EventUtils.event("ad_pull_start", ext = obj) EventUtils.event("ad_pull_start", ext = obj)
interAd = MaxInterstitialAd(interAdUnit, activity) interAd = MaxInterstitialAd(ConfigHelper.interMaxId, activity)
interAd?.setListener(object : MaxAdListener { interAd?.setListener(object : MaxAdListener {
override fun onAdLoaded(p0: MaxAd) { override fun onAdLoaded(p0: MaxAd) {
//Log.e("MXL", "interAd:onAdLoaded: ")
maxAdPullReport(p0, "InterstitialAd") maxAdPullReport(p0, "InterstitialAd")
retryAttempt = 0 retryAttempt = 0
onLoad?.invoke() onLoad?.invoke()
} }
override fun onAdDisplayed(p0: MaxAd) { override fun onAdDisplayed(p0: MaxAd) {
isInterAdShow=true
} }
override fun onAdHidden(p0: MaxAd) { override fun onAdHidden(p0: MaxAd) {
...@@ -235,7 +222,7 @@ object MaxAdUtils { ...@@ -235,7 +222,7 @@ object MaxAdUtils {
maxAdPullReport(null, "InterstitialAd", p1.message) maxAdPullReport(null, "InterstitialAd", p1.message)
onLoad?.invoke() onLoad?.invoke()
AdDisplayUtils.getInstance().incrementAdRequestFailCount() AdDisplayUtils.getInstance().incrementAdRequestFailCount()
// Log.e("MXL", "interAdLoadFailed: "+p1.message ) Log.e("MXL", "onAdLoadFailed: " + p1.message)
// retryAttempt++ // retryAttempt++
// Handler(Looper.getMainLooper()).postDelayed({ // Handler(Looper.getMainLooper()).postDelayed({
// retryAttempt++ // retryAttempt++
...@@ -275,7 +262,7 @@ object MaxAdUtils { ...@@ -275,7 +262,7 @@ object MaxAdUtils {
val obj = JSONObject() val obj = JSONObject()
obj.put("ad_unit", "interAd") obj.put("ad_unit", "interAd")
EventUtils.event("ad_prepare_show", ext = obj) EventUtils.event("ad_prepare_show", ext = obj)
isInterAdShow=false isInterAdShow = false
if (isAdExpired()) { if (isAdExpired()) {
val obj = JSONObject() val obj = JSONObject()
obj.put("ad_unit", "interAd") obj.put("ad_unit", "interAd")
...@@ -290,7 +277,7 @@ object MaxAdUtils { ...@@ -290,7 +277,7 @@ object MaxAdUtils {
onHidden?.invoke() onHidden?.invoke()
return return
} }
if (isInterLoaded()) { if (interAd != null) {
interAd?.setRevenueListener(EventOnPaidEventListener()) interAd?.setRevenueListener(EventOnPaidEventListener())
showIntervalDialogAndShowAd(activity, isLoadAdNow, isShowInterVal, onHidden, 0) showIntervalDialogAndShowAd(activity, isLoadAdNow, isShowInterVal, onHidden, 0)
} else { } else {
...@@ -389,14 +376,14 @@ object MaxAdUtils { ...@@ -389,14 +376,14 @@ object MaxAdUtils {
maxAdShowReport(p0, "interAd", activity) maxAdShowReport(p0, "interAd", activity)
AdDisplayUtils.getInstance().incrementAdDisplayCount() AdDisplayUtils.getInstance().incrementAdDisplayCount()
adLastDisplayTime = System.currentTimeMillis() / 1000 adLastDisplayTime = System.currentTimeMillis() / 1000
isInterAdShow=true isInterAdShow = true
} }
override fun onAdHidden(p0: MaxAd) { override fun onAdHidden(p0: MaxAd) {
interAd = null interAd = null
onHidden?.invoke() onHidden?.invoke()
// loadInterstitialAd(activity) // loadInterstitialAd(activity)
isInterAdShow=false isInterAdShow = false
} }
override fun onAdClicked(p0: MaxAd) { override fun onAdClicked(p0: MaxAd) {
...@@ -421,90 +408,232 @@ object MaxAdUtils { ...@@ -421,90 +408,232 @@ object MaxAdUtils {
}) })
if (thisInterAd?.isReady == true) { if (thisInterAd?.isReady == true) {
thisInterAd.showAd() thisInterAd?.showAd()
} else { } else {
onHidden?.invoke() onHidden?.invoke()
interAd?.loadAd() interAd?.loadAd()
} }
} }
private var nativeAdLoader: MaxNativeAdLoader =
var nativeAdLoader: MaxNativeAdLoader? = null MaxNativeAdLoader(ConfigHelper.nativeMaxId, BaseApplication.context)
private var currentNativeAd: MaxAd? = null//当前展示的NativeAd private var nativeAd: MaxAd? = null
private var showedNativeAd: MaxAd? = null//已经展示过的NativeAd private var haveSetAdListener: Boolean = false
private var nativeData: Pair<MaxNativeAdView?, MaxAd?>? = null
private var loadingListener: (() -> Unit)? = null private var loadingListener: (() -> Unit)? = null
private var isLoading = false private var activityString: String = ""
private val TAG = "AdMaxNativeUtils"
private fun setNativeAdListener() {
if (!haveSetAdListener) {
//加载展示监听
nativeAdLoader.setNativeAdListener(object : MaxNativeAdListener() {
override fun onNativeAdLoaded(nativeAdView: MaxNativeAdView?, ad: MaxAd) {
// Cleanup any pre-existing native ad to prevent memory leaks.
if (nativeAd?.nativeAd?.isExpired == true) {
nativeAdLoader.destroy(nativeAd)
}
// Save ad to be rendered later.
nativeAd = ad
nativeLoadTime = System.currentTimeMillis()
loadingListener?.invoke()
loadingListener = null
}
override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
super.onNativeAdLoadFailed(p0, p1)
loadingListener?.invoke()
loadingListener = null
// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
val obj2 = JSONObject()
obj2.put("reason", "no_ad")
obj2.put("ad_unit", "nativeAd")
EventUtils.event("ad_show_error", ext = obj2)
}
override fun onNativeAdClicked(p0: MaxAd) {
super.onNativeAdClicked(p0)
// AdDisplayUtils.getInstance().incrementAdClickCount()
nativeAd?.let { maxAdclickReport(it, "nativeAd") }
isMultiClick(nativeAd)
}
override fun onNativeAdExpired(p0: MaxAd) {
super.onNativeAdExpired(p0)
}
})
//广告价格监听
nativeAdLoader.setRevenueListener { ad ->
}
haveSetAdListener = true
fun loadNativeAd() {
if (currentNativeAd != null) {
return
}
if (nativeData != null) {
return
}
if (isLoading) {
return
} }
isLoading = true }
naviteAdUnit = ConfigHelper.nativeMaxId
nativeAdLoader = MaxNativeAdLoader(naviteAdUnit, BaseApplication.context)
private fun createNativeAdView(context: Context, layout: Int): MaxNativeAdView {
val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(layout)
.setTitleTextViewId(R.id.ad_headline)
.setBodyTextViewId(R.id.ad_body)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
.setIconImageViewId(R.id.ad_app_icon)
.setMediaContentViewGroupId(R.id.ad_media)
// .setOptionsContentViewGroupId(R.id.options_view)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
.setCallToActionButtonId(R.id.ad_call_to_action)
.build()
return MaxNativeAdView(binder, context)
}
fun loadNativeAd() {
setNativeAdListener()
if (!AdDisplayUtils.getInstance().shouldShowAd()) { if (!AdDisplayUtils.getInstance().shouldShowAd()) {
return return
} }
nativeAdLoader.loadAd()
}
// val reqId = UUID.randomUUID().toString() fun showNativeAd(activity: Activity, parent: ViewGroup, where: Int = 0) {
// val obj = JSONObject() var layout = R.layout.layout_max_native_small
// obj.put("req_id", reqId) if (where == 1) {
// obj.put("ad_type", "nativeAd") layout = R.layout.layout_max_native_big
nativeAdLoader?.setNativeAdListener(object : MaxNativeAdListener() { }
override fun onNativeAdLoaded(maxNativeAdView: MaxNativeAdView?, maxAd: MaxAd) {
//Log.e("MXL", "onNativeAdLoaded: " )
nativeData = Pair(maxNativeAdView, maxAd)
currentNativeAd = nativeData?.second
maxAdPullReport(maxAd, "NativeAd")
isLoading = false
loadingListener?.invoke()
}
override fun onNativeAdLoadFailed(p0: String, p1: MaxError) { activityString = activity::class.java.toString().split(".").last()
maxAdPullReport(null, "NativeAd", p1.message) setNativeAdListener()
isLoading = false
}
})
nativeAdLoader?.loadAd()
}
fun showNativeAd(activity: Activity?, parent: ViewGroup) {
// val obj = JSONObject()
// obj.put("ad_unit", "NativeAd")
// EventUtils.event("ad_prepare_show", ext = obj)
if (!AdDisplayUtils.getInstance().shouldShowAd()) { if (!AdDisplayUtils.getInstance().shouldShowAd()) {
return return
} }
loadingListener = { if (nativeAd?.nativeAd?.isExpired == true || nativeAd == null) {
//赋值给已经展示过的 nativeAdLoader.destroy(nativeAd)
showedNativeAd = currentNativeAd nativeAdLoader.loadAd()
//nativeAd已展示了赋空 loadingListener = {
currentNativeAd = null if (nativeAd != null) {
nativeData = null showReadyNative(activity, parent, layout)
loadingListener = null }
loadNativeAd() }
}
if (currentNativeAd == null) {
loadNativeAd()
// val obj = JSONObject()
// obj.put("reason", "no_ad")
// obj.put("ad_unit", "nativeAd")
// EventUtils.event("ad_show_error", ext = obj)
} else { } else {
loadingListener?.invoke() showReadyNative(activity, parent, layout)
} }
} }
private fun showReadyNative(activity: Activity, parent: ViewGroup, layout: Int) {
val adView = createNativeAdView(activity, layout)
parent.isVisible = true
parent.removeAllViews()
nativeAdLoader.render(adView, nativeAd)
parent.addView(adView)
nativeAd?.let { maxAdShowReport(it, "nativeAd") }
// AdDisplayUtils.getInstance().incrementAdDisplayCount()
}
// var nativeAdLoader: MaxNativeAdLoader? = null
// private var currentNativeAd: MaxAd? = null//当前展示的NativeAd
// private var showedNativeAd: MaxAd? = null//已经展示过的NativeAd
// private var nativeData: Pair<MaxNativeAdView?, MaxAd?>? = null
// private var loadingListener: (() -> Unit)? = null
// private var isLoading = false
//
// fun loadNativeAd() {
// if (currentNativeAd != null) {
// return
// }
// if (nativeData != null) {
// return
// }
//
// if (isLoading) {
// return
// }
// isLoading = true
// nativeAdLoader = MaxNativeAdLoader(ConfigHelper.nativeMaxId, BaseApplication.context)
//
// if (!AdDisplayUtils.getInstance().shouldShowAd()) {
// return
// }
//
//// val reqId = UUID.randomUUID().toString()
//// val obj = JSONObject()
//// obj.put("req_id", reqId)
//// obj.put("ad_type", "nativeAd")
// nativeAdLoader?.setNativeAdListener(object : MaxNativeAdListener() {
// override fun onNativeAdLoaded(maxNativeAdView: MaxNativeAdView?, maxAd: MaxAd) {
// Log.e("MXL", "onNativeAdLoaded: " )
// nativeData = Pair(maxNativeAdView, maxAd)
// currentNativeAd = nativeData?.second
// maxAdPullReport(maxAd, "NativeAd")
// isLoading = false
// loadingListener?.invoke()
// }
//
// override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
// maxAdPullReport(null, "NativeAd", p1.message)
// isLoading = false
// Log.e("MXL", "onNativeAdLoadFailed: "+p1.message )
// }
// })
// nativeAdLoader?.loadAd()
// }
// private var nativeAdLoader: MaxNativeAdLoader? = null
// private var loadedNativeAd: MaxAd? = null
// fun showNativeAd(activity: Activity?, parent: ViewGroup) {
//// val obj = JSONObject()
//// obj.put("ad_unit", "NativeAd")
//// EventUtils.event("ad_prepare_show", ext = obj)
// if (!AdDisplayUtils.getInstance().shouldShowAd()) {
// return
// }
// nativeAdLoader = MaxNativeAdLoader(ConfigHelper.nativeMaxId, BaseApplication.context)
// nativeAdLoader?.setNativeAdListener(object :MaxNativeAdListener(){
// override fun onNativeAdLoaded(p0: MaxNativeAdView?, p1: MaxAd) {
// Log.e("MXL", "onNativeAdLoaded: ", )
// if (loadedNativeAd != null)
// {
// nativeAdLoader?.destroy(loadedNativeAd)
// }
// loadedNativeAd = p1
// parent.removeAllViews()
// parent.addView(p0)
// }
//
// override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
// Log.e("MXL", "onNativeAdLoadFailed: "+p1.message )
// }
// })
//
//// loadingListener = {
//// if ((System.currentTimeMillis() - nativeLoadTime <= 1000 * 60 * 60) && nativeData?.first != null) {
//// parent.removeAllViews()
//// parent.addView(nativeData?.first)
//// }
//// showedNativeAd = currentNativeAd
//// currentNativeAd = null
//// nativeData = null
//// loadingListener = null
//// loadNativeAd()
//// }
//// if (currentNativeAd == null) {
//// loadNativeAd()
////// val obj = JSONObject()
////// obj.put("reason", "no_ad")
////// obj.put("ad_unit", "nativeAd")
////// EventUtils.event("ad_show_error", ext = obj)
//// } else {
//// loadingListener?.invoke()
//// }
// }
private var lastAd: Any? = null private var lastAd: Any? = null
var maxMultiClick = 4 var maxMultiClick = 4
...@@ -557,7 +686,6 @@ object MaxAdUtils { ...@@ -557,7 +686,6 @@ object MaxAdUtils {
obj.put("status", "2") obj.put("status", "2")
} }
EventUtils.event("ad_pull", ext = obj) EventUtils.event("ad_pull", ext = obj)
// Log.e("MXL", "maxAdPullReport: ", )
} }
...@@ -573,7 +701,12 @@ object MaxAdUtils { ...@@ -573,7 +701,12 @@ object MaxAdUtils {
obj.put("latency", ad?.requestLatencyMillis) obj.put("latency", ad?.requestLatencyMillis)
obj.put("valueMicros", ad?.revenue) obj.put("valueMicros", ad?.revenue)
obj.put("from", activity?.localClassName) obj.put("from", activity?.localClassName)
EventUtils.event("ad_show", ext = obj) if (!adUnit.equals("nativeAd")) {
EventUtils.event("ad_show", ext = obj)
} else {
EventUtils.event("big_img_ad_show", ext = obj)
}
} }
...@@ -619,12 +752,10 @@ object MaxAdUtils { ...@@ -619,12 +752,10 @@ object MaxAdUtils {
roasbundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD")///(Required)tROAS事件必须 roasbundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD")///(Required)tROAS事件必须
mFirebaseAnalytics.logEvent("Total_Ads_Revenue_001", roasbundle) // 给Taichi用 mFirebaseAnalytics.logEvent("Total_Ads_Revenue_001", roasbundle) // 给Taichi用
taichiSharedPreferencesEditor.putFloat("TaichiTroasCache", 0f)//重新清零,开始计算 taichiSharedPreferencesEditor.putFloat("TaichiTroasCache", 0f)//重新清零,开始计算
val logger = AppEventsLogger.newLogger(BaseApplication.context) val logger = AppEventsLogger.newLogger(BaseApplication.context)
val parameters = Bundle() val parameters = Bundle()
parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD") parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD")
logger.logEvent("ad_value",currentTaichiTroasCache,parameters) logger.logEvent("ad_value", currentTaichiTroasCache.toDouble(), parameters)
} else { } else {
taichiSharedPreferencesEditor.putFloat( taichiSharedPreferencesEditor.putFloat(
"TaichiTroasCache", "TaichiTroasCache",
......
...@@ -168,9 +168,9 @@ object DialogViews { ...@@ -168,9 +168,9 @@ object DialogViews {
if (adS == 1) { if (adS == 1) {
view.visibility = View.VISIBLE view.visibility = View.VISIBLE
if(ConfigHelper.admobTrueMaxFlase==0){ if(ConfigHelper.admobTrueMaxFlase==0){
MaxAdUtils.showNativeAd(null, view) MaxAdUtils.showNativeAd(this as Activity, view)
}else{ }else{
AdmobUtils.showNativeAd(null, view) AdmobUtils.showNativeAd(this as Activity, view)
} }
} else { } else {
......
...@@ -56,7 +56,7 @@ class FileScanDialog( ...@@ -56,7 +56,7 @@ class FileScanDialog(
a1.cancel() a1.cancel()
} }
if(ConfigHelper.admobTrueMaxFlase==0){ if(ConfigHelper.admobTrueMaxFlase==0){
MaxAdUtils.showNativeAd(activity, binding.flAd) MaxAdUtils.showNativeAd(activity, binding.flAd, where = 1)
}else{ }else{
AdmobUtils.showNativeAd(activity, binding.flAd) AdmobUtils.showNativeAd(activity, binding.flAd)
} }
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF3C22" /> <solid android:color="@color/theme_color" />
<corners android:radius="10dp" /> <corners android:radius="10dp" />
</shape> </shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/theme_color" />
<corners android:radius="10dp" />
</shape>
\ 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:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/bg_ad_border"
android:baselineAligned="false"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="46dp"
android:layout_height="46dp"
android:layout_gravity="center_vertical"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="#FF923E"
android:padding="2dp"
android:text="Ad"
android:textColor="@color/white"
android:textSize="12sp"
tools:ignore="HardcodedText" />
<TextView
android:layout_marginStart="8dp"
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="center_vertical"
android:layout_marginVertical="10dp" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_gravity="center_vertical"
android:background="@drawable/bg_ad_button"
android:gravity="center"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="15sp"
tools:text="Install" />
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ No newline at end of file
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#D9D9D9"
android:baselineAligned="false"
android:minHeight="40dp"
android:orientation="horizontal"
android:paddingHorizontal="5dp"
android:paddingVertical="2dp"
tools:ignore="UselessParent">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical">
<FrameLayout
android:id="@+id/ad_media"
android:layout_width="80dp"
android:layout_height="60dp"
android:layout_gravity="center" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:background="@color/black"
android:padding="2dp"
android:text="Ad"
android:textColor="@color/white"
android:textSize="8sp"
tools:ignore="HardcodedText,SmallSp" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/ad_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="14sp"
tools:ignore="SmallSp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
tools:ignore="ContentDescription" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:layout_marginVertical="5dp"
android:background="@drawable/bg_theme_10"
android:gravity="center"
android:textColor="@color/white"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
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