Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
A
appzxhy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
appzxhy
Commits
fdd35a54
Commit
fdd35a54
authored
May 19, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[修改]广告代码修改
parent
dc0b08ce
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
578 additions
and
463 deletions
+578
-463
AdState.kt
app/src/main/java/com/base/appzxhy/ads/AdState.kt
+29
-8
AdsMgr.kt
app/src/main/java/com/base/appzxhy/ads/AdsMgr.kt
+33
-34
AdsShowCallBack.kt
app/src/main/java/com/base/appzxhy/ads/AdsShowCallBack.kt
+15
-3
LimitUtils.kt
app/src/main/java/com/base/appzxhy/ads/LimitUtils.kt
+0
-2
NativeParentView.kt
app/src/main/java/com/base/appzxhy/ads/NativeParentView.kt
+110
-0
AdInterMgr.kt
app/src/main/java/com/base/appzxhy/ads/admob/AdInterMgr.kt
+80
-54
AdNativeMgr.kt
app/src/main/java/com/base/appzxhy/ads/admob/AdNativeMgr.kt
+30
-71
AdOpenMgr.kt
app/src/main/java/com/base/appzxhy/ads/admob/AdOpenMgr.kt
+77
-58
AdmobEvent.kt
app/src/main/java/com/base/appzxhy/ads/admob/AdmobEvent.kt
+22
-9
MaxAdState.kt
...src/main/java/com/base/appzxhy/ads/applovin/MaxAdState.kt
+0
-59
MaxInsertMgr.kt
...c/main/java/com/base/appzxhy/ads/applovin/MaxInsertMgr.kt
+74
-57
MaxNativeMgr.kt
...c/main/java/com/base/appzxhy/ads/applovin/MaxNativeMgr.kt
+5
-36
MaxOpenMgr.kt
...src/main/java/com/base/appzxhy/ads/applovin/MaxOpenMgr.kt
+89
-64
AdConfigBean.kt
...rc/main/java/com/base/appzxhy/bean/config/AdConfigBean.kt
+14
-8
No files found.
app/src/main/java/com/base/appzxhy/ads/
admob/Admob
AdState.kt
→
app/src/main/java/com/base/appzxhy/ads/AdState.kt
View file @
fdd35a54
package
com.base.appzxhy.ads
.admob
package
com.base.appzxhy.ads
import
android.app.Activity
import
android.app.Activity
import
android.app.Dialog
import
java.lang.ref.WeakReference
import
java.lang.ref.WeakReference
class
AdmobAdState
{
class
AdState
<
T
>()
{
var
adDialog
:
Dialog
?
=
null
/**
/**
* 当前缓存的广告
* 当前缓存的广告
*/
*/
var
currentAd
:
Any
?
=
null
var
currentAd
:
T
?
=
null
/**
/**
* 是否正在缓存加载广告
* 是否正在缓存加载广告
...
@@ -30,25 +36,36 @@ class AdmobAdState {
...
@@ -30,25 +36,36 @@ class AdmobAdState {
*/
*/
var
lastShowTime
:
Long
=
0
var
lastShowTime
:
Long
=
0
fun
onAdDisplayed
()
{
lastShowTime
=
System
.
currentTimeMillis
()
/**
* 广告已经展示
*/
fun
onAdDisplayed
()
{
currentAd
=
null
currentAd
=
null
activityRef
=
null
activityRef
=
null
adDialog
?.
dismiss
()
adDialog
=
null
lastShowTime
=
System
.
currentTimeMillis
()
}
}
fun
onAdHidden
()
{
fun
onAdHidden
()
{
// 广告关闭,清空缓存数据,重新加载
//重置下上次展示的时间,避免看广告的时间算入间隔
lastShowTime
=
System
.
currentTimeMillis
()
}
}
fun
onAdDisplayFailed
()
{
fun
onAdDisplayFailed
()
{
adDialog
?.
dismiss
()
adDialog
=
null
currentAd
=
null
currentAd
=
null
activityRef
=
null
activityRef
=
null
}
}
fun
onAdLoaded
(
ad
:
Any
?)
{
fun
onAdLoaded
(
ad
:
T
?)
{
//这里可能提前设置,所有可以不设置,max回调的类型可能不同
//这里可能提前设置,所有可以不设置,max回调的类型可能不同
if
(
ad
!=
null
)
{
if
(
ad
!=
null
)
{
currentAd
=
ad
currentAd
=
ad
...
@@ -58,6 +75,10 @@ class AdmobAdState {
...
@@ -58,6 +75,10 @@ class AdmobAdState {
}
}
fun
onAdLoadFailed
()
{
fun
onAdLoadFailed
()
{
adDialog
?.
dismiss
()
adDialog
=
null
loadingAd
=
false
loadingAd
=
false
}
}
}
}
app/src/main/java/com/base/appzxhy/ads/AdsMgr.kt
View file @
fdd35a54
...
@@ -3,8 +3,6 @@ package com.base.appzxhy.ads
...
@@ -3,8 +3,6 @@ package com.base.appzxhy.ads
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
android.view.ViewGroup
import
android.view.ViewGroup
import
android.widget.FrameLayout
import
android.widget.Toast
import
androidx.annotation.LayoutRes
import
androidx.annotation.LayoutRes
import
com.applovin.sdk.AppLovinMediationProvider
import
com.applovin.sdk.AppLovinMediationProvider
import
com.applovin.sdk.AppLovinSdk
import
com.applovin.sdk.AppLovinSdk
...
@@ -20,6 +18,7 @@ import com.base.appzxhy.ads.applovin.AdMaxEvent
...
@@ -20,6 +18,7 @@ import com.base.appzxhy.ads.applovin.AdMaxEvent
import
com.base.appzxhy.ads.applovin.MaxInsertMgr
import
com.base.appzxhy.ads.applovin.MaxInsertMgr
import
com.base.appzxhy.ads.applovin.MaxNativeMgr
import
com.base.appzxhy.ads.applovin.MaxNativeMgr
import
com.base.appzxhy.ads.applovin.MaxOpenMgr
import
com.base.appzxhy.ads.applovin.MaxOpenMgr
import
com.base.appzxhy.bean.config.AdConfigBean
import
com.base.appzxhy.bean.config.AdConfigBean.Companion.adsConfigBean
import
com.base.appzxhy.bean.config.AdConfigBean.Companion.adsConfigBean
import
com.base.appzxhy.bean.config.ConfigBean.Companion.configBean
import
com.base.appzxhy.bean.config.ConfigBean.Companion.configBean
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.helper.EventUtils
...
@@ -40,7 +39,7 @@ object AdsMgr {
...
@@ -40,7 +39,7 @@ object AdsMgr {
private
val
adOpenMgr
by
lazy
{
private
val
adOpenMgr
by
lazy
{
AdOpenMgr
()
AdOpenMgr
()
}
}
private
val
adIn
sert
Mgr
by
lazy
{
private
val
adIn
ter
Mgr
by
lazy
{
AdInterMgr
()
AdInterMgr
()
}
}
...
@@ -87,11 +86,8 @@ object AdsMgr {
...
@@ -87,11 +86,8 @@ object AdsMgr {
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
return
return
}
}
if
(
adsConfigBean
.
adSwitch
)
{
initAdmob
(
context
)
initAdmob
(
context
)
}
else
{
initMax
(
context
)
initMax
(
context
)
}
}
}
...
@@ -101,14 +97,14 @@ object AdsMgr {
...
@@ -101,14 +97,14 @@ object AdsMgr {
entry
.
value
.
initializationState
==
AdapterStatus
.
State
.
READY
entry
.
value
.
initializationState
==
AdapterStatus
.
State
.
READY
}
}
isAdmobInit
=
readyAdapter
!=
null
isAdmobInit
=
readyAdapter
!=
null
EventUtils
.
event
(
"AdmobInit"
,
"AdmobInit"
)
EventUtils
.
event
(
"AdmobInit"
,
"AdmobInit
=$isAdmobInit
"
)
// context.toast("admob init")
// context.toast("admob init")
if
(
adsConfigBean
.
adSwitch
)
{
if
(
AdConfigBean
.
adsConfigBean
.
adSwitch
)
{
admobInitCallBack
?.
invoke
()
admobInitCallBack
?.
invoke
()
admobInitCallBack
=
null
admobInitCallBack
=
null
adOpenMgr
.
loadAd
(
context
,
AdmobEvent
(
"openAd"
,
context
::
class
.
java
.
simpleName
))
// adOpenMgr.loadAd(context, true
, AdmobEvent("openAd", context::class.java.simpleName))
adIn
sert
Mgr
.
loadAd
(
context
,
AdmobEvent
(
"interAd"
,
context
::
class
.
java
.
simpleName
))
adIn
ter
Mgr
.
loadAd
(
context
,
AdmobEvent
(
"interAd"
,
context
::
class
.
java
.
simpleName
))
}
}
}
}
...
@@ -135,7 +131,7 @@ object AdsMgr {
...
@@ -135,7 +131,7 @@ object AdsMgr {
isMaxInit
=
true
isMaxInit
=
true
// maxOpenMgr.loadAd(context)
// maxOpenMgr.loadAd(context)
if
(!
adsConfigBean
.
adSwitch
)
{
if
(!
adsConfigBean
.
adSwitch
)
{
maxInsertMgr
.
loadAd
(
AdMaxEvent
(
"interAd"
,
context
::
class
.
java
.
simpleName
))
maxInsertMgr
.
loadAd
(
context
,
AdMaxEvent
(
"interAd"
,
context
::
class
.
java
.
simpleName
))
context
.
toast
(
"max init"
)
context
.
toast
(
"max init"
)
maxInitCallBack
?.
invoke
()
maxInitCallBack
?.
invoke
()
maxInitCallBack
=
null
maxInitCallBack
=
null
...
@@ -160,28 +156,30 @@ object AdsMgr {
...
@@ -160,28 +156,30 @@ object AdsMgr {
*/
*/
fun
showOpen
(
fun
showOpen
(
activity
:
Activity
,
activity
:
Activity
,
isUnLimit
:
Boolean
=
false
,
showCallBack
:
AdsShowCallBack
?
=
null
,
showCallBack
:
AdsShowCallBack
?
=
null
,
)
{
)
{
if
(
configBean
.
isInBlackList
)
{
if
(
configBean
.
isInBlackList
)
{
EventUtils
.
event
(
"isInBlackList"
,
"isInBlackList=${configBean.isInBlackList}"
)
EventUtils
.
event
(
"isInBlackList"
,
"isInBlackList=${configBean.isInBlackList}"
)
showCallBack
?.
failed
()
return
return
}
}
val
from
=
activity
::
class
.
java
.
simpleName
val
from
=
activity
::
class
.
java
.
simpleName
if
(
adsConfigBean
.
adSwitch
)
{
if
(
AdConfigBean
.
adsConfigBean
.
adSwitch
)
{
if
(
isAdmobInit
)
{
if
(
isAdmobInit
)
{
adOpenMgr
.
show
(
activity
,
AdmobEvent
(
"openAd"
,
from
),
showCallBack
)
adOpenMgr
.
show
(
activity
,
isUnLimit
,
AdmobEvent
(
"openAd"
,
from
),
showCallBack
)
}
else
{
}
else
{
admobInitCallBack
=
{
admobInitCallBack
=
{
}
}
adOpenMgr
.
show
(
activity
,
AdmobEvent
(
"openAd"
,
from
),
showCallBack
)
adOpenMgr
.
show
(
activity
,
isUnLimit
,
AdmobEvent
(
"openAd"
,
from
),
showCallBack
)
}
}
}
else
{
}
else
{
if
(
isMaxInit
)
{
if
(
isMaxInit
)
{
maxOpenMgr
.
show
(
activity
,
AdMaxEvent
(
"openAd"
,
from
),
showCallBack
)
maxOpenMgr
.
show
(
activity
,
isUnLimit
,
AdMaxEvent
(
"openAd"
,
from
),
showCallBack
)
}
else
{
}
else
{
maxInitCallBack
=
{
maxInitCallBack
=
{
maxOpenMgr
.
show
(
activity
,
AdMaxEvent
(
"openAd"
,
from
),
showCallBack
)
maxOpenMgr
.
show
(
activity
,
isUnLimit
,
AdMaxEvent
(
"openAd"
,
from
),
showCallBack
)
}
}
}
}
}
}
...
@@ -197,49 +195,50 @@ object AdsMgr {
...
@@ -197,49 +195,50 @@ object AdsMgr {
*/
*/
fun
showInsert
(
fun
showInsert
(
activity
:
Activity
,
activity
:
Activity
,
isUnLimit
:
Boolean
=
false
,
showCallBack
:
AdsShowCallBack
?
=
null
,
showCallBack
:
AdsShowCallBack
?
=
null
,
)
{
)
{
if
(
configBean
.
isInBlackList
)
{
if
(
configBean
.
isInBlackList
)
{
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
showCallBack
?.
failed
()
return
return
}
}
LogEx
.
logDebug
(
"showAd"
,
"adSwitch=${adsConfigBean.adSwitch}"
)
LogEx
.
logDebug
(
"showAd"
,
"adSwitch=${
AdConfigBean.
adsConfigBean.adSwitch}"
)
val
from
=
activity
::
class
.
java
.
simpleName
val
from
=
activity
::
class
.
java
.
simpleName
if
(
adsConfigBean
.
adSwitch
)
{
if
(
AdConfigBean
.
adsConfigBean
.
adSwitch
)
{
adIn
sertMgr
.
show
(
activity
,
AdmobEvent
(
"interAd"
,
from
),
showCallBack
)
adIn
terMgr
.
show
(
activity
,
isUnLimit
,
AdmobEvent
(
"interAd"
,
from
),
showCallBack
)
}
else
{
}
else
{
maxInsertMgr
.
show
(
activity
,
AdMaxEvent
(
"interAd"
,
from
),
showCallBack
)
maxInsertMgr
.
show
(
activity
,
isUnLimit
,
AdMaxEvent
(
"interAd"
,
from
),
showCallBack
)
}
}
}
}
/**
/**
* 展示原生广告
* 展示原生广告
*
*
* @param
parent 需要展示原生
广告的布局容器
* @param
nativeView 需要展示
广告的布局容器
* @param layout
Admob原生根布局必须为 NativeAdView
* @param layout
原生广告布局 ,这里传入的layout要和com.example.mydemo.strategy.ads.admob.NativeView里的id一致
*/
*/
fun
showNative
(
fun
showNative
(
activity
:
Activity
,
nativeView
:
NativeParentView
,
parent
:
FrameLayout
,
@LayoutRes
layout
:
Int
,
@LayoutRes
admobLayout
:
Int
,
@LayoutRes
maxLayout
:
Int
,
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
)
{
)
{
if
(
configBean
.
isInBlackList
)
{
if
(
configBean
.
isInBlackList
)
{
LogEx
.
logDebug
(
"showNative"
,
"isInBlackList"
)
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
return
return
}
}
val
from
=
activity
::
class
.
java
.
simpleName
if
(!
isAdmobInit
)
return
if
(
adsConfigBean
.
adSwitch
)
{
if
(
AdConfigBean
.
adsConfigBean
.
adSwitch
)
{
adNativeMgr
.
show
(
AdmobEvent
(
"nativeAd"
,
from
),
parent
,
admobL
ayout
,
nativeCallBack
)
adNativeMgr
.
show
(
AdmobEvent
(
"nativeAd"
,
"nativeAd"
),
nativeView
,
l
ayout
,
nativeCallBack
)
}
else
{
}
else
{
maxNativeMgr
.
show
(
AdMaxEvent
(
"nativeAd"
,
from
),
parent
,
maxL
ayout
,
nativeCallBack
)
maxNativeMgr
.
show
(
AdMaxEvent
(
"nativeAd"
,
"nativeAd"
),
nativeView
,
l
ayout
,
nativeCallBack
)
}
}
}
}
fun
isNativeShow
()
=
LimitUtils
.
isAdShow
(
AdsType
.
NATIVE
,
null
)
/**
/**
* 展示banner广告
* 展示banner广告
...
@@ -251,7 +250,7 @@ object AdsMgr {
...
@@ -251,7 +250,7 @@ object AdsMgr {
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
EventUtils
.
event
(
"isInBlackList"
,
configBean
.
isInBlackList
.
toString
())
return
return
}
}
if
(
adsConfigBean
.
adSwitch
)
{
if
(
AdConfigBean
.
adsConfigBean
.
adSwitch
)
{
adBannerMgr
.
show
(
parent
,
collapsible
,
adClose
)
adBannerMgr
.
show
(
parent
,
collapsible
,
adClose
)
}
}
}
}
...
...
app/src/main/java/com/base/appzxhy/ads/AdsShowCallBack.kt
View file @
fdd35a54
...
@@ -2,7 +2,19 @@ package com.base.appzxhy.ads
...
@@ -2,7 +2,19 @@ package com.base.appzxhy.ads
abstract
class
AdsShowCallBack
{
abstract
class
AdsShowCallBack
{
open
fun
show
()
{}
open
fun
show
()
{}
abstract
fun
close
(
where
:
Int
=
0
)
abstract
fun
failed
(
where
:
Int
=
0
)
open
fun
failed
(
where
:
Int
=
0
)
{
abstract
fun
adFailed
(
where
:
Int
=
0
)
next
()
}
open
fun
adFailed
(
where
:
Int
=
0
)
{
next
()
}
open
fun
close
(
where
:
Int
=
0
)
{
next
()
}
abstract
fun
next
()
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ads/LimitUtils.kt
View file @
fdd35a54
...
@@ -65,7 +65,6 @@ object LimitUtils {
...
@@ -65,7 +65,6 @@ object LimitUtils {
.
getInt
(
NUM_CLICK
,
0
)
>=
maxCount
.
getInt
(
NUM_CLICK
,
0
)
>=
maxCount
}
}
private
fun
getAdEventMsg
(
adsType
:
AdsType
):
String
{
private
fun
getAdEventMsg
(
adsType
:
AdsType
):
String
{
return
when
(
adsType
)
{
return
when
(
adsType
)
{
AdsType
.
OPEN
->
"Open"
AdsType
.
OPEN
->
"Open"
...
@@ -120,7 +119,6 @@ object LimitUtils {
...
@@ -120,7 +119,6 @@ object LimitUtils {
return
!(
isDisplayLimited
||
isClickLimited
||
isRequestLimited
)
return
!(
isDisplayLimited
||
isClickLimited
||
isRequestLimited
)
}
}
private
fun
addNum
(
key
:
String
)
{
private
fun
addNum
(
key
:
String
)
{
val
currentDate
=
System
.
currentTimeMillis
().
toFormatTime4
()
val
currentDate
=
System
.
currentTimeMillis
().
toFormatTime4
()
if
(
saveDate
!=
currentDate
)
{
if
(
saveDate
!=
currentDate
)
{
...
...
app/src/main/java/com/base/appzxhy/ads/NativeParentView.kt
0 → 100644
View file @
fdd35a54
package
com.base.appzxhy.ads
import
android.annotation.SuppressLint
import
android.content.Context
import
android.util.AttributeSet
import
android.view.LayoutInflater
import
android.widget.Button
import
android.widget.FrameLayout
import
android.widget.ImageView
import
android.widget.TextView
import
androidx.annotation.LayoutRes
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.nativeAds.MaxNativeAdLoader
import
com.applovin.mediation.nativeAds.MaxNativeAdView
import
com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
import
com.base.appzxhy.R
import
com.google.android.gms.ads.nativead.NativeAd
import
com.google.android.gms.ads.nativead.NativeAdView
@SuppressLint
(
"ViewConstructor"
)
class
NativeParentView
(
context
:
Context
,
attrs
:
AttributeSet
?
=
null
)
:
FrameLayout
(
context
,
attrs
)
{
private
val
TAG
=
"NativeParentView"
private
var
removeAll
=
true
init
{
// 获取XML属性
val
a
=
context
.
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
NativeParentView
,
0
,
0
)
// 从XML中读取属性值
// 例如,如果你的XML中有自定义属性 `app:customAttribute="value"`
removeAll
=
a
.
getBoolean
(
R
.
styleable
.
NativeParentView_removeAll
,
true
)
// 回收TypedArray
a
.
recycle
()
}
fun
setNativeAd
(
nativeAd
:
NativeAd
,
@LayoutRes
resource
:
Int
?
=
null
,
)
{
val
layout
=
resource
?:
R
.
layout
.
layout_admob_native_custom
val
adView
=
layout
.
let
{
LayoutInflater
.
from
(
context
).
inflate
(
it
,
null
)
}
as
NativeAdView
adView
.
mediaView
=
adView
.
findViewById
(
R
.
id
.
ad_media
)
adView
.
headlineView
=
adView
.
findViewById
(
R
.
id
.
ad_headline
)
adView
.
bodyView
=
adView
.
findViewById
(
R
.
id
.
ad_body
)
adView
.
callToActionView
=
adView
.
findViewById
(
R
.
id
.
ad_call_to_action
)
adView
.
iconView
=
adView
.
findViewById
(
R
.
id
.
ad_app_icon
)
(
adView
.
headlineView
as
TextView
?)
?.
text
=
nativeAd
.
headline
adView
.
mediaView
?.
mediaContent
=
nativeAd
.
mediaContent
if
(
nativeAd
.
body
==
null
)
{
adView
.
bodyView
?.
visibility
=
INVISIBLE
}
else
{
adView
.
bodyView
?.
visibility
=
VISIBLE
(
adView
.
bodyView
as
TextView
?)
?.
text
=
nativeAd
.
body
}
if
(
nativeAd
.
callToAction
==
null
)
{
adView
.
callToActionView
?.
visibility
=
INVISIBLE
}
else
{
adView
.
callToActionView
?.
visibility
=
VISIBLE
(
adView
.
callToActionView
as
Button
?)
?.
text
=
nativeAd
.
callToAction
}
if
(
nativeAd
.
icon
==
null
)
{
adView
.
iconView
?.
visibility
=
GONE
}
else
{
(
adView
.
iconView
as
ImageView
?)
?.
setImageDrawable
(
nativeAd
.
icon
?.
drawable
)
adView
.
iconView
?.
visibility
=
VISIBLE
}
adView
.
setNativeAd
(
nativeAd
)
setBackgroundResource
(
0
)
if
(
removeAll
)
{
removeAllViews
()
}
addView
(
adView
)
}
fun
setNativeAd
(
nativeAdLoader
:
MaxNativeAdLoader
,
nativeAd
:
MaxAd
,
@LayoutRes
resource
:
Int
?
=
null
)
{
val
layout
=
resource
?:
R
.
layout
.
layout_max_native_custom
val
binder
:
MaxNativeAdViewBinder
=
MaxNativeAdViewBinder
.
Builder
(
layout
)
.
setTitleTextViewId
(
R
.
id
.
title_text_view
)
.
setBodyTextViewId
(
R
.
id
.
body_text_view
)
.
setAdvertiserTextViewId
(
R
.
id
.
advertiser_text_view
)
.
setIconImageViewId
(
R
.
id
.
icon_image_view
)
.
setMediaContentViewGroupId
(
R
.
id
.
media_view_container
)
.
setOptionsContentViewGroupId
(
R
.
id
.
options_view
)
.
setStarRatingContentViewGroupId
(
R
.
id
.
star_rating_view
)
.
setCallToActionButtonId
(
R
.
id
.
cta_button
)
.
build
()
val
adView
=
MaxNativeAdView
(
binder
,
context
)
nativeAdLoader
.
render
(
adView
,
nativeAd
)
setBackgroundResource
(
0
)
removeAllViews
()
addView
(
adView
)
}
}
app/src/main/java/com/base/appzxhy/ads/admob/AdInterMgr.kt
View file @
fdd35a54
...
@@ -3,9 +3,10 @@ package com.base.appzxhy.ads.admob
...
@@ -3,9 +3,10 @@ package com.base.appzxhy.ads.admob
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.
ads.AdCountDownDialog.createUICountdownTimer
import
com.base.appzxhy.
MyApplication
import
com.base.appzxhy.ads.AdCountDownDialog.showAdCountDownDialog
import
com.base.appzxhy.ads.AdCountDownDialog.showAdCountDownDialog
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdState
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
...
@@ -15,6 +16,7 @@ import com.google.android.gms.ads.FullScreenContentCallback
...
@@ -15,6 +16,7 @@ import com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.interstitial.InterstitialAd
import
com.google.android.gms.ads.interstitial.InterstitialAd
import
com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import
com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import
java.lang.ref.WeakReference
/**
/**
...
@@ -22,51 +24,65 @@ import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
...
@@ -22,51 +24,65 @@ import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
*/
*/
class
AdInterMgr
{
class
AdInterMgr
{
private
var
adState
=
AdmobAdState
()
private
var
adState
=
AdState
<
InterstitialAd
>()
private
var
showCallBack
:
AdsShowCallBack
?
=
null
fun
show
(
fun
show
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
activity
:
Activity
,
isUnLimit
:
Boolean
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?
=
null
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
showCallBack
?.
failed
(
0
)
showCallBack
?.
failed
(
0
)
adState
.
onAdDisplayFailed
()
return
return
}
}
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
showCallBack
?.
failed
(
1
)
showCallBack
?.
failed
(
2
)
return
return
}
}
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
showCallBack
?.
failed
(
2
)
showCallBack
?.
failed
(
3
)
return
return
}
}
val
loadingDialog
=
activity
.
showAdCountDownDialog
()
if
(
adState
.
currentAd
==
null
||
!
adAvailable
())
{
loadAd
(
activity
,
adEvent
)
{
if
(
adState
.
currentAd
!=
null
)
{
createUICountdownTimer
(
loadingDialog
)
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
}
}
adEvent
.
adPrepareShow
()
adState
.
activityRef
=
WeakReference
(
activity
)
this
.
showCallBack
=
showCallBack
if
(
adState
.
adDialog
==
null
)
{
adState
.
adDialog
=
activity
.
showAdCountDownDialog
()
}
else
{
adState
.
adDialog
?.
dismiss
()
}
}
val
needLoad
=
adState
.
currentAd
==
null
||
!
adAvailable
()
if
(
needLoad
)
{
if
(!
adState
.
loadingAd
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
}
}
}
else
{
}
else
{
createUICountdownTimer
(
loadingDialog
)
{
showReadyAd
(
adEvent
)
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
}
}
}
}
}
private
fun
showReadyAd
(
a
ctivity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?
)
{
private
fun
showReadyAd
(
a
dEvent
:
AdEvent
)
{
val
ad
=
adState
.
currentAd
as
InterstitialAd
?
ad
?.
run
{
ad
State
.
currentAd
?.
run
{
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
override
fun
onAdShowedFullScreenContent
()
{
override
fun
onAdShowedFullScreenContent
()
{
super
.
onAdShowedFullScreenContent
()
super
.
onAdShowedFullScreenContent
()
val
ac
=
adState
.
activityRef
?.
get
()
(
adEvent
as
AdmobEvent
).
showAd
(
responseInfo
,
ac
)
adState
.
onAdDisplayed
()
adState
.
onAdDisplayed
()
showCallBack
?.
show
()
showCallBack
?.
show
()
(
adEvent
as
AdmobEvent
).
showAd
(
responseInfo
,
activity
)
LimitUtils
.
addDisplayNum
()
LimitUtils
.
addDisplayNum
()
}
}
...
@@ -75,6 +91,8 @@ class AdInterMgr {
...
@@ -75,6 +91,8 @@ class AdInterMgr {
adState
.
onAdDisplayFailed
()
adState
.
onAdDisplayFailed
()
showCallBack
?.
adFailed
()
showCallBack
?.
adFailed
()
showCallBack
=
null
adEvent
.
adShowError
(
adError
)
adEvent
.
adShowError
(
adError
)
}
}
...
@@ -84,7 +102,8 @@ class AdInterMgr {
...
@@ -84,7 +102,8 @@ class AdInterMgr {
adState
.
onAdHidden
()
adState
.
onAdHidden
()
showCallBack
?.
close
()
showCallBack
?.
close
()
loadAd
(
activity
.
applicationContext
,
AdmobEvent
(
"interAd"
,
"preload"
))
showCallBack
=
null
loadAd
(
MyApplication
.
appContext
,
false
,
AdmobEvent
(
"interAd"
,
"preload"
))
}
}
override
fun
onAdClicked
()
{
override
fun
onAdClicked
()
{
...
@@ -94,28 +113,35 @@ class AdInterMgr {
...
@@ -94,28 +113,35 @@ class AdInterMgr {
LimitUtils
.
addClickNum
()
LimitUtils
.
addClickNum
()
}
}
}
}
show
(
activity
)
val
activity
=
adState
.
activityRef
?.
get
()
activity
?.
let
{
show
(
it
)
}
}
}
}
}
fun
loadAd
(
context
:
Context
,
adEvent
:
AdEvent
,
loadCallBack
:
(()
->
Unit
)?
=
null
)
{
fun
loadAd
(
context
:
Context
,
adEvent
:
AdEvent
,
isUnLimit
:
Boolean
=
false
,
)
{
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
loadCallBack
?.
invoke
()
this
.
showCallBack
?.
close
(
4
)
this
.
showCallBack
=
null
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
return
return
}
}
}
if
(!
adState
.
loadingAd
)
{
adState
.
loadingAd
=
true
adEvent
.
adPulStart
()
adEvent
.
adPulStart
()
InterstitialAd
.
load
(
context
,
GlobalConfig
.
ID_ADMOB_INTER
,
AdRequest
.
Builder
().
build
(),
InterstitialAd
.
load
(
context
,
GlobalConfig
.
ID_ADMOB_INTER
,
AdRequest
.
Builder
().
build
(),
object
:
InterstitialAdLoadCallback
()
{
object
:
InterstitialAdLoadCallback
()
{
override
fun
onAdLoaded
(
ad
:
InterstitialAd
)
{
override
fun
onAdLoaded
(
ad
:
InterstitialAd
)
{
adState
.
onAdLoaded
(
ad
)
adState
.
onAdLoaded
(
ad
)
loadCallBack
?.
invoke
()
if
(
this
@AdInterMgr
.
showCallBack
!=
null
)
{
showReadyAd
(
adEvent
)
}
(
adEvent
as
AdmobEvent
).
pullAd
(
ad
.
responseInfo
)
(
adEvent
as
AdmobEvent
).
pullAd
(
ad
.
responseInfo
)
LimitUtils
.
addRequestNum
()
LimitUtils
.
addRequestNum
()
ad
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
ad
)
ad
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
ad
)
...
@@ -124,11 +150,11 @@ class AdInterMgr {
...
@@ -124,11 +150,11 @@ class AdInterMgr {
override
fun
onAdFailedToLoad
(
loadAdError
:
LoadAdError
)
{
override
fun
onAdFailedToLoad
(
loadAdError
:
LoadAdError
)
{
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
(
adEvent
as
AdmobEvent
).
pullAd
(
loadAdError
.
responseInfo
,
loadAdError
)
(
adEvent
as
AdmobEvent
).
pullAd
(
loadAdError
.
responseInfo
,
loadAdError
)
loadCallBack
?.
invoke
()
showCallBack
?.
adFailed
()
showCallBack
=
null
}
}
}
}
)
)
}
}
}
...
...
app/src/main/java/com/base/appzxhy/ads/admob/AdNativeMgr.kt
View file @
fdd35a54
package
com.base.appzxhy.ads.admob
package
com.base.appzxhy.ads.admob
import
android.content.Context
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
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.R
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
import
com.google.android.gms.ads.AdListener
import
com.google.android.gms.ads.AdListener
import
com.google.android.gms.ads.AdLoader
import
com.google.android.gms.ads.AdLoader
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.nativead.MediaView
import
com.google.android.gms.ads.nativead.NativeAd
import
com.google.android.gms.ads.nativead.NativeAd
import
com.google.android.gms.ads.nativead.NativeAdOptions
import
com.google.android.gms.ads.nativead.NativeAdOptions
import
com.google.android.gms.ads.nativead.NativeAdView
import
java.util.concurrent.ConcurrentLinkedDeque
/**
/**
*原生广告加载显示管理类
*原生广告加载显示管理类
*/
*/
class
AdNativeMgr
{
class
AdNativeMgr
{
private
val
TAG
=
this
::
class
.
java
.
simpleName
/**
* 上一次的缓存成功时间
*/
protected
var
lastTime
:
Long
=
0
protected
var
lastTime
:
Long
=
0
private
var
currentAd
:
NativeAd
?
=
null
/**
* 原生广告缓存队列
*/
private
val
cacheItems
=
ConcurrentLinkedDeque
<
NativeAd
>()
private
fun
loadAd
(
private
fun
loadAd
(
admobEvent
:
AdmobEvent
,
admobEvent
:
AdmobEvent
,
context
:
Context
,
parent
:
NativeParentView
,
callback
:
((
nativeAd
:
NativeAd
)
->
Unit
)?
=
null
layout
:
Int
)
{
)
{
admobEvent
.
adPulStart
()
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
NATIVE
,
admobEvent
))
return
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
NATIVE
,
admobEvent
))
return
admobEvent
.
adPulStart
()
var
currentNativeAd
:
NativeAd
?
=
null
var
currentNativeAd
:
NativeAd
?
=
null
val
adLoader
=
AdLoader
.
Builder
(
val
adLoader
=
AdLoader
.
Builder
(
context
,
parent
.
context
,
GlobalConfig
.
ID_ADMOB_NATIVE
GlobalConfig
.
ID_ADMOB_NATIVE
).
forNativeAd
{
nativeAd
->
).
forNativeAd
{
nativeAd
->
currentNativeAd
=
nativeAd
currentNativeAd
=
nativeAd
cacheItems
.
offer
(
nativeAd
)
lastTime
=
System
.
currentTimeMillis
()
lastTime
=
System
.
currentTimeMillis
()
nativeAd
.
setOnPaidEventListener
(
AdmobEvent
.
EventOnPaidEventListener
(
nativeAd
))
nativeAd
.
setOnPaidEventListener
(
AdmobEvent
.
EventOnPaidEventListener
(
nativeAd
))
admobEvent
.
pullAd
(
nativeAd
.
responseInfo
)
admobEvent
.
pullAd
(
nativeAd
.
responseInfo
)
callback
?.
invoke
(
nativeAd
)
show
(
admobEvent
,
parent
,
layout
)
}.
withAdListener
(
object
:
AdListener
()
{
}.
withAdListener
(
object
:
AdListener
()
{
override
fun
onAdFailedToLoad
(
error
:
LoadAdError
)
{
override
fun
onAdFailedToLoad
(
error
:
LoadAdError
)
{
...
@@ -72,72 +71,32 @@ class AdNativeMgr {
...
@@ -72,72 +71,32 @@ class AdNativeMgr {
fun
show
(
fun
show
(
admobEvent
:
AdmobEvent
,
admobEvent
:
AdmobEvent
,
parent
:
FrameLayout
,
parent
:
NativeParentView
,
layout
:
Int
,
layout
:
Int
,
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
)
{
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
NATIVE
,
admobEvent
))
{
return
}
admobEvent
.
adPrepareShow
()
admobEvent
.
adPrepareShow
()
if
(
currentAd
==
null
||
!
adAvailable
())
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
NATIVE
,
admobEvent
))
{
loadAd
(
admobEvent
,
parent
.
context
)
{
nativeAd
:
NativeAd
->
cacheItems
.
clear
()
setNative
(
parent
,
layout
,
nativeAd
)
return
admobEvent
.
showAd
(
nativeAd
.
responseInfo
)
nativeCallBack
?.
invoke
(
nativeAd
)
}
}
else
{
currentAd
?.
let
{
setNative
(
parent
,
layout
,
it
)
admobEvent
.
showAd
(
it
.
responseInfo
)
nativeCallBack
?.
invoke
(
it
)
}
}
}
private
fun
setNative
(
parent
:
FrameLayout
,
layout
:
Int
,
nativeAd
:
NativeAd
)
=
runCatching
{
currentAd
=
null
val
nativeView
=
LayoutInflater
.
from
(
parent
.
context
).
inflate
(
layout
,
parent
,
false
)
as
NativeAdView
val
mediaView
=
nativeView
.
findViewById
<
MediaView
?>(
R
.
id
.
ad_media
)
mediaView
?.
mediaContent
=
nativeAd
.
mediaContent
val
headlineView
=
nativeView
.
findViewById
<
TextView
?>(
R
.
id
.
ad_headline
)
headlineView
?.
text
=
nativeAd
.
headline
val
bodyView
=
nativeView
.
findViewById
<
TextView
?>(
R
.
id
.
ad_body
)
if
(
nativeAd
.
body
==
null
)
{
bodyView
?.
visibility
=
View
.
INVISIBLE
}
else
{
bodyView
?.
visibility
=
View
.
VISIBLE
bodyView
?.
text
=
nativeAd
.
body
}
}
val
callToActionView
=
nativeView
.
findViewById
<
Button
?>(
R
.
id
.
ad_call_to_action
)
val
nativeAd
=
cacheItems
.
peek
(
)
if
(
nativeAd
.
callToAction
==
null
)
{
if
(
nativeAd
==
null
||
!
adAvailable
()
)
{
callToActionView
?.
visibility
=
View
.
INVISIBLE
//缓存过期了就清空
}
else
{
cacheItems
.
clear
()
callToActionView
?.
visibility
=
View
.
VISIBLE
loadAd
(
admobEvent
,
parent
,
layout
)
callToActionView
?.
text
=
nativeAd
.
callToActio
n
retur
n
}
}
val
iconView
=
nativeView
.
findViewById
<
ImageView
?>(
R
.
id
.
ad_app_icon
)
nativeCallBack
?.
invoke
(
nativeAd
)
if
(
nativeAd
.
icon
==
null
)
{
parent
.
setNativeAd
(
nativeAd
,
layout
)
iconView
?.
visibility
=
View
.
GONE
admobEvent
.
showAd
(
nativeAd
.
responseInfo
)
}
else
{
iconView
?.
setImageDrawable
(
nativeAd
.
icon
?.
drawable
)
iconView
?.
visibility
=
View
.
VISIBLE
}
parent
.
removeAllViews
()
parent
.
addView
(
nativeView
)
}
}
private
fun
adAvailable
():
Boolean
{
private
fun
adAvailable
():
Boolean
{
return
((
System
.
currentTimeMillis
()
-
lastTime
)
/
1000
/
60
).
toInt
()
<
30
return
((
System
.
currentTimeMillis
()
-
lastTime
)
/
1000
/
60
).
toInt
()
<
30
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ads/admob/AdOpenMgr.kt
View file @
fdd35a54
...
@@ -3,9 +3,11 @@ package com.base.appzxhy.ads.admob
...
@@ -3,9 +3,11 @@ package com.base.appzxhy.ads.admob
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.MyApplication
import
com.base.appzxhy.ads.AdCountDownDialog.createUICountdownTimer
import
com.base.appzxhy.ads.AdCountDownDialog.createUICountdownTimer
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdState
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
import
com.google.android.gms.ads.AdError
import
com.google.android.gms.ads.AdError
...
@@ -13,6 +15,7 @@ import com.google.android.gms.ads.AdRequest
...
@@ -13,6 +15,7 @@ import com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.appopen.AppOpenAd
import
com.google.android.gms.ads.appopen.AppOpenAd
import
java.lang.ref.WeakReference
/**
/**
...
@@ -20,12 +23,16 @@ import com.google.android.gms.ads.appopen.AppOpenAd
...
@@ -20,12 +23,16 @@ import com.google.android.gms.ads.appopen.AppOpenAd
*/
*/
class
AdOpenMgr
{
class
AdOpenMgr
{
private
val
adState
=
AdmobAdState
()
private
val
TAG
=
"AdOpenMgr"
private
val
adState
=
AdState
<
AppOpenAd
>()
private
var
showCallBack
:
AdsShowCallBack
?
=
null
fun
show
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
fun
show
(
activity
:
Activity
,
isUnLimit
:
Boolean
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
return
}
}
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
showCallBack
?.
failed
()
showCallBack
?.
failed
()
return
return
...
@@ -34,46 +41,46 @@ class AdOpenMgr {
...
@@ -34,46 +41,46 @@ class AdOpenMgr {
showCallBack
?.
failed
()
showCallBack
?.
failed
()
return
return
}
}
adEvent
.
adPrepareShow
()
if
(
adState
.
currentAd
==
null
||
!
adAvailable
())
{
loadAd
(
activity
,
adEvent
)
{
if
(
adState
.
currentAd
!=
null
)
{
createUICountdownTimer
(
null
)
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
}
}
else
{
showCallBack
?.
failed
()
}
}
}
}
else
{
adEvent
.
adPrepareShow
()
createUICountdownTimer
(
null
)
{
adState
.
activityRef
=
WeakReference
(
activity
)
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
this
.
showCallBack
=
showCallBack
// if (adState.adDialog == null) {
// adState.adDialog = activity.showAdPreparingDialog(1)
// } else {
// adState.adDialog?.dismiss()
// }
val
needLoad
=
adState
.
currentAd
==
null
||
!
adAvailable
()
if
(
needLoad
)
{
if
(!
adState
.
loadingAd
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
}
}
}
else
{
showReadyAd
(
adEvent
)
}
}
}
}
private
fun
showReadyAd
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
private
fun
showReadyAd
(
adEvent
:
AdEvent
)
{
val
ad
=
adState
.
currentAd
as
AppOpenAd
?
adState
.
currentAd
?.
run
{
ad
?.
run
{
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
override
fun
onAdShowedFullScreenContent
()
{
override
fun
onAdShowedFullScreenContent
()
{
val
ac
=
adState
.
activityRef
?.
get
()
(
adEvent
as
AdmobEvent
).
showAd
(
this
@run
.
responseInfo
,
ac
)
showCallBack
?.
show
()
showCallBack
?.
show
()
(
adEvent
as
AdmobEvent
).
showAd
(
this
@run
.
responseInfo
,
activity
)
adState
.
onAdDisplayed
()
adState
.
onAdDisplayed
()
//计数
//计数
LimitUtils
.
addDisplayNum
()
LimitUtils
.
addDisplayNum
()
}
}
override
fun
onAdFailedToShowFullScreenContent
(
adError
:
AdError
)
{
override
fun
onAdFailedToShowFullScreenContent
(
adError
:
AdError
)
{
super
.
onAdFailedToShowFullScreenContent
(
adError
)
super
.
onAdFailedToShowFullScreenContent
(
adError
)
showCallBack
?.
adFailed
()
showCallBack
?.
adFailed
()
showCallBack
=
null
adState
.
onAdDisplayFailed
()
adState
.
onAdDisplayFailed
()
(
adEvent
as
AdmobEvent
).
adShowError
(
adError
)
(
adEvent
as
AdmobEvent
).
adShowError
(
adError
)
...
@@ -82,9 +89,15 @@ class AdOpenMgr {
...
@@ -82,9 +89,15 @@ class AdOpenMgr {
override
fun
onAdDismissedFullScreenContent
()
{
override
fun
onAdDismissedFullScreenContent
()
{
super
.
onAdDismissedFullScreenContent
()
super
.
onAdDismissedFullScreenContent
()
showCallBack
?.
close
()
showCallBack
?.
close
()
showCallBack
=
null
adState
.
onAdHidden
()
adState
.
onAdHidden
()
loadAd
(
activity
.
applicationContext
,
AdmobEvent
(
"openAd"
,
"preload"
))
//预加载,“Timeout for show call succeed.”预加载的广告大概率,
loadAd
(
MyApplication
.
appContext
,
false
,
AdmobEvent
(
"openAd"
,
"preload"
))
}
}
override
fun
onAdClicked
()
{
override
fun
onAdClicked
()
{
...
@@ -93,20 +106,23 @@ class AdOpenMgr {
...
@@ -93,20 +106,23 @@ class AdOpenMgr {
LimitUtils
.
addClickNum
()
LimitUtils
.
addClickNum
()
}
}
}
}
show
(
activity
)
val
activity
=
adState
.
activityRef
?.
get
()
activity
?.
let
{
show
(
it
)
}
}
}
}
}
fun
loadAd
(
context
:
Context
,
adEvent
:
AdEvent
,
loadCallBack
:
(()
->
Unit
)?
=
null
)
{
fun
loadAd
(
context
:
Context
,
adEvent
:
AdEvent
,
isUnLimit
:
Boolean
=
false
)
{
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
loadCallBack
?.
invoke
()
this
.
showCallBack
?.
close
()
this
.
showCallBack
=
null
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
return
return
}
}
}
if
(!
adState
.
loadingAd
)
{
adState
.
loadingAd
=
true
adEvent
.
adPulStart
()
adEvent
.
adPulStart
()
AppOpenAd
.
load
(
AppOpenAd
.
load
(
...
@@ -116,21 +132,24 @@ class AdOpenMgr {
...
@@ -116,21 +132,24 @@ class AdOpenMgr {
object
:
AppOpenAd
.
AppOpenAdLoadCallback
()
{
object
:
AppOpenAd
.
AppOpenAdLoadCallback
()
{
override
fun
onAdLoaded
(
appOpenAd
:
AppOpenAd
)
{
override
fun
onAdLoaded
(
appOpenAd
:
AppOpenAd
)
{
adState
.
onAdLoaded
(
appOpenAd
)
adState
.
onAdLoaded
(
appOpenAd
)
loadCallBack
?.
invoke
()
if
(
this
@AdOpenMgr
.
showCallBack
!=
null
)
{
showReadyAd
(
adEvent
)
}
(
adEvent
as
AdmobEvent
).
pullAd
(
appOpenAd
.
responseInfo
)
(
adEvent
as
AdmobEvent
).
pullAd
(
appOpenAd
.
responseInfo
)
appOpenAd
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
appOpenAd
)
appOpenAd
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
appOpenAd
)
LimitUtils
.
addRequestNum
()
LimitUtils
.
addRequestNum
()
}
}
override
fun
onAdFailedToLoad
(
loadAdError
:
LoadAdError
)
{
override
fun
onAdFailedToLoad
(
loadAdError
:
LoadAdError
)
{
showCallBack
?.
adFailed
()
showCallBack
=
null
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
loadCallBack
?.
invoke
()
(
adEvent
as
AdmobEvent
).
pullAd
(
loadAdError
.
responseInfo
,
loadAdError
)
(
adEvent
as
AdmobEvent
).
pullAd
(
loadAdError
.
responseInfo
,
loadAdError
)
}
}
}
}
)
)
}
}
}
private
fun
adAvailable
()
=
((
System
.
currentTimeMillis
()
-
adState
.
lastLoadTime
)
/
1000
/
60
).
toInt
()
<
30
private
fun
adAvailable
()
=
((
System
.
currentTimeMillis
()
-
adState
.
lastLoadTime
)
/
1000
/
60
).
toInt
()
<
30
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ads/admob/AdmobEvent.kt
View file @
fdd35a54
...
@@ -7,6 +7,7 @@ import com.base.appzxhy.ads.AdEvent
...
@@ -7,6 +7,7 @@ import com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.SolarEngineEvent
import
com.base.appzxhy.ads.SolarEngineEvent
import
com.base.appzxhy.ads.taichiPref
import
com.base.appzxhy.ads.taichiPref
import
com.base.appzxhy.ads.taichiSharedPreferencesEditor
import
com.base.appzxhy.ads.taichiSharedPreferencesEditor
import
com.base.appzxhy.bean.config.AdConfigBean
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.LogEx
import
com.facebook.appevents.AppEventsConstants
import
com.facebook.appevents.AppEventsConstants
...
@@ -25,7 +26,9 @@ import com.google.firebase.analytics.FirebaseAnalytics
...
@@ -25,7 +26,9 @@ import com.google.firebase.analytics.FirebaseAnalytics
import
com.google.firebase.analytics.ktx.analytics
import
com.google.firebase.analytics.ktx.analytics
import
com.google.firebase.ktx.Firebase
import
com.google.firebase.ktx.Firebase
import
org.json.JSONObject
import
org.json.JSONObject
import
kotlin.Any
import
kotlin.random.Random
import
kotlin.text.toFloat
class
AdmobEvent
:
AdEvent
{
class
AdmobEvent
:
AdEvent
{
...
@@ -67,7 +70,7 @@ class AdmobEvent : AdEvent {
...
@@ -67,7 +70,7 @@ class AdmobEvent : AdEvent {
obj
.
put
(
"status"
,
"2"
)
obj
.
put
(
"status"
,
"2"
)
}
}
EventUtils
.
event
(
"ad_pull"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_pull"
,
ext
=
obj
)
LogEx
.
logDebug
(
TAG
,
"ad_pull
_$adUnit
obj=$obj"
)
LogEx
.
logDebug
(
TAG
,
"ad_pull obj=$obj"
)
}
}
...
@@ -89,9 +92,9 @@ class AdmobEvent : AdEvent {
...
@@ -89,9 +92,9 @@ class AdmobEvent : AdEvent {
obj
.
put
(
"from"
,
from
)
obj
.
put
(
"from"
,
from
)
obj
.
put
(
"networkname"
,
responseInfo
?.
mediationAdapterClassName
)
obj
.
put
(
"networkname"
,
responseInfo
?.
mediationAdapterClassName
)
if
(
adUnit
!=
"nativeAd"
)
{
if
(
adUnit
!=
"nativeAd"
)
{
EventUtils
.
event
(
"ad_click
_$adUnit
"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_click"
,
ext
=
obj
)
}
else
{
}
else
{
EventUtils
.
event
(
"ad_click
_$adUnit
"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_click"
,
ext
=
obj
)
}
}
}
}
...
@@ -115,12 +118,21 @@ class AdmobEvent : AdEvent {
...
@@ -115,12 +118,21 @@ class AdmobEvent : AdEvent {
}
else
{
}
else
{
EventUtils
.
event
(
"ad_show"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_show"
,
ext
=
obj
)
}
}
LogEx
.
logDebug
(
TAG
,
"ad_show
_$adUnit
$obj"
)
LogEx
.
logDebug
(
TAG
,
"ad_show $obj"
)
}
}
class
EventOnPaidEventListener
(
private
val
ad
:
Any
?)
:
OnPaidEventListener
{
class
EventOnPaidEventListener
(
private
val
ad
:
Any
?)
:
OnPaidEventListener
{
override
fun
onPaidEvent
(
adValue
:
AdValue
)
{
override
fun
onPaidEvent
(
adValue
:
AdValue
)
{
SolarEngineEvent
.
eventSolar
(
ad
,
adValue
.
valueMicros
)
SolarEngineEvent
.
eventSolar
(
ad
,
adValue
.
valueMicros
)
val
adRatio
=
AdConfigBean
.
adsConfigBean
.
adRatio
val
random
=
Random
.
Default
.
nextInt
(
1
,
100
)
if
(
random
>
adRatio
)
{
taichiSharedPreferencesEditor
.
putFloat
(
"TaichiTroasCache"
,
0f
)
taichiSharedPreferencesEditor
.
commit
()
EventUtils
.
event
(
"ad_price_limit"
)
return
}
val
valueMicros
=
adValue
.
valueMicros
val
valueMicros
=
adValue
.
valueMicros
val
currencyCode
=
adValue
.
currencyCode
val
currencyCode
=
adValue
.
currencyCode
val
precision
=
adValue
.
precisionType
val
precision
=
adValue
.
precisionType
...
@@ -149,9 +161,12 @@ class AdmobEvent : AdEvent {
...
@@ -149,9 +161,12 @@ class AdmobEvent : AdEvent {
params
.
putString
(
"precisionType"
,
precisionType
)
params
.
putString
(
"precisionType"
,
precisionType
)
Firebase
.
analytics
.
logEvent
(
"Ad_Impression_Revenue"
,
params
)
Firebase
.
analytics
.
logEvent
(
"Ad_Impression_Revenue"
,
params
)
val
previousTaichiTroasCache
=
taichiPref
.
getFloat
(
"TaichiTroasCache"
,
0f
)
val
previousTaichiTroasCache
=
taichiPref
.
getFloat
(
"TaichiTroasCache"
,
0f
)
val
currentTaichiTroasCache
=
(
previousTaichiTroasCache
+
val
currentTaichiTroasCache
=
(
previousTaichiTroasCache
+
currentImpressionRevenue
).
toFloat
()
currentImpressionRevenue
).
toFloat
()
if
(
currentTaichiTroasCache
>=
0.01
)
{
//如果超过0.01就触发一次tROAS taichi事件
val
taichiAdValue
=
AdConfigBean
.
adsConfigBean
.
taichiAdValue
/
100f
if
(
currentTaichiTroasCache
>=
taichiAdValue
)
{
//如果超过0.01就触发一次tROAS taichi事件
val
roasbundle
=
Bundle
()
val
roasbundle
=
Bundle
()
roasbundle
.
putDouble
(
roasbundle
.
putDouble
(
FirebaseAnalytics
.
Param
.
VALUE
,
FirebaseAnalytics
.
Param
.
VALUE
,
...
@@ -303,8 +318,6 @@ class AdmobEvent : AdEvent {
...
@@ -303,8 +318,6 @@ class AdmobEvent : AdEvent {
obj
.
put
(
"from"
,
from
)
obj
.
put
(
"from"
,
from
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
LogEx
.
logDebug
(
TAG
,
"ad_show_error
_$adUnit
$obj"
)
LogEx
.
logDebug
(
TAG
,
"ad_show_error $obj"
)
}
}
}
}
app/src/main/java/com/base/appzxhy/ads/applovin/MaxAdState.kt
deleted
100644 → 0
View file @
dc0b08ce
package
com.base.appzxhy.ads.applovin
import
android.app.Activity
import
java.lang.ref.WeakReference
class
MaxAdState
{
/**
* 当前缓存的广告
*/
var
currentAd
:
Any
?
=
null
/**
* 是否正在缓存加载广告
*/
var
loadingAd
:
Boolean
=
false
/**
* 用于保存引用现有页面,在此页面显示广告(因为要等待广告加载完毕)
*/
var
activityRef
:
WeakReference
<
Activity
>?
=
null
/**
* 上一次的缓存成功时间
*/
var
lastLoadTime
:
Long
=
0
/**
* 上次展示时间
*/
var
lastShowTime
:
Long
=
0
fun
onAdDisplayed
()
{
lastShowTime
=
System
.
currentTimeMillis
()
activityRef
=
null
}
fun
onAdHidden
()
{
// 广告关闭,清空缓存数据,重新加载
}
fun
onAdDisplayFailed
()
{
activityRef
=
null
}
fun
onAdLoaded
()
{
loadingAd
=
false
lastLoadTime
=
System
.
currentTimeMillis
()
}
fun
onAdLoadFailed
()
{
loadingAd
=
false
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ads/applovin/MaxInsertMgr.kt
View file @
fdd35a54
package
com.base.appzxhy.ads.applovin
package
com.base.appzxhy.ads.applovin
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxInterstitialAd
import
com.applovin.mediation.ads.MaxInterstitialAd
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.MyApplication
import
com.base.appzxhy.ads.AdCountDownDialog.createUICountdownTimer
import
com.base.appzxhy.ads.AdCountDownDialog.showAdCountDownDialog
import
com.base.appzxhy.ads.AdCountDownDialog.showAdCountDownDialog
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdState
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
import
java.lang.ref.WeakReference
/**
/**
*插屏广告加载显示管理类
*插屏广告加载显示管理类
*/
*/
class
MaxInsertMgr
{
class
MaxInsertMgr
{
private
var
adState
=
MaxAdState
().
apply
{
private
var
adState
=
AdState
<
MaxInterstitialAd
>()
currentAd
=
MaxInterstitialAd
(
GlobalConfig
.
ID_MAX_INTER
,
MyApplication
.
appContext
)
private
var
showCallBack
:
AdsShowCallBack
?
=
null
}
fun
show
(
fun
show
(
activity
:
Activity
,
activity
:
Activity
,
isUnLimit
:
Boolean
,
adEvent
:
AdEvent
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?
showCallBack
:
AdsShowCallBack
?
)
{
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
showCallBack
?.
failed
(
0
)
showCallBack
?.
failed
(
1
)
return
return
}
}
if
(
showCallBack
!=
null
)
{
adState
.
activityRef
=
WeakReference
(
activity
)
this
.
showCallBack
=
showCallBack
if
(
adState
.
adDialog
==
null
)
{
adState
.
adDialog
=
activity
.
showAdCountDownDialog
()
}
adEvent
.
adPrepareShow
()
}
if
(!
adState
.
loadingAd
)
{
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
showCallBack
?.
failed
(
1
)
showCallBack
?.
failed
(
3
)
return
return
}
}
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
showCallBack
?.
failed
(
2
)
showCallBack
?.
failed
(
4
)
return
return
}
}
adEvent
.
adPrepareShow
()
val
loadingDialog
=
activity
.
showAdCountDownDialog
()
if
(
adState
.
currentAd
==
null
||
!
adAvailable
())
{
loadAd
(
adEvent
)
{
flag
:
Boolean
->
if
(
flag
)
{
createUICountdownTimer
(
loadingDialog
)
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
}
}
else
{
showCallBack
?.
failed
()
}
}
if
(!
adAvailable
()
||
adState
.
currentAd
==
null
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
return
}
}
}
else
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
if
(
adState
.
currentAd
?.
isReady
==
false
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
return
}
}
showReadyAd
(
adEvent
)
}
}
}
private
fun
showReadyAd
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
val
ad
=
adState
.
currentAd
as
MaxInterstitialAd
?
ad
?.
run
{
private
fun
showReadyAd
(
adEvent
:
AdEvent
)
{
adState
.
currentAd
?.
run
{
setListener
(
object
:
MaxAdListener
{
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdLoaded
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
=
Unit
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
=
Unit
...
@@ -84,6 +90,7 @@ class MaxInsertMgr {
...
@@ -84,6 +90,7 @@ class MaxInsertMgr {
override
fun
onAdDisplayFailed
(
ad
:
MaxAd
,
error
:
MaxError
)
{
override
fun
onAdDisplayFailed
(
ad
:
MaxAd
,
error
:
MaxError
)
{
adState
.
onAdDisplayFailed
()
adState
.
onAdDisplayFailed
()
showCallBack
?.
adFailed
()
showCallBack
?.
adFailed
()
showCallBack
=
null
(
adEvent
as
AdMaxEvent
).
adShowError
(
error
)
(
adEvent
as
AdMaxEvent
).
adShowError
(
error
)
}
}
...
@@ -93,7 +100,7 @@ class MaxInsertMgr {
...
@@ -93,7 +100,7 @@ class MaxInsertMgr {
adState
.
onAdHidden
()
adState
.
onAdHidden
()
showCallBack
?.
close
()
showCallBack
?.
close
()
loadAd
(
AdMaxEvent
(
"interAd"
,
"preload"
))
loadAd
(
activity
.
applicationContext
,
false
,
AdMaxEvent
(
"interAd"
,
"preload"
))
}
}
override
fun
onAdClicked
(
ad
:
MaxAd
)
{
override
fun
onAdClicked
(
ad
:
MaxAd
)
{
...
@@ -112,17 +119,25 @@ class MaxInsertMgr {
...
@@ -112,17 +119,25 @@ class MaxInsertMgr {
fun
loadAd
(
fun
loadAd
(
context
:
Context
,
adEvent
:
AdEvent
,
adEvent
:
AdEvent
,
loadCallBack
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
isUnLimit
:
Boolean
=
false
,
)
{
)
{
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
loadCallBack
?.
invoke
(
false
)
this
.
showCallBack
?.
close
(
4
)
this
.
showCallBack
=
null
return
return
}
}
}
val
ad
=
adState
.
currentAd
as
MaxInterstitialAd
?
if
(!
adState
.
loadingAd
)
{
adState
.
loadingAd
=
true
adEvent
.
adPulStart
()
ad
?.
setListener
(
object
:
MaxAdListener
{
adState
.
currentAd
=
MaxInterstitialAd
(
GlobalConfig
.
ID_MAX_INTER
,
context
)
adState
.
currentAd
?.
setListener
(
object
:
MaxAdListener
{
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdHidden
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdHidden
(
p0
:
MaxAd
)
=
Unit
...
@@ -130,25 +145,27 @@ class MaxInsertMgr {
...
@@ -130,25 +145,27 @@ class MaxInsertMgr {
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
=
Unit
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
=
Unit
override
fun
onAdLoaded
(
ad
:
MaxAd
)
{
override
fun
onAdLoaded
(
ad
:
MaxAd
)
{
loadCallBack
?.
invoke
(
true
)
adState
.
onAdLoaded
(
null
)
adState
.
onAdLoaded
()
val
ac
=
adState
.
activityRef
?.
get
()
if
(
ac
!=
null
)
{
show
(
ac
,
isUnLimit
,
adEvent
,
null
)
}
(
adEvent
as
AdMaxEvent
).
pullAd
(
ad
)
(
adEvent
as
AdMaxEvent
).
pullAd
(
ad
)
LimitUtils
.
addRequestNum
()
LimitUtils
.
addRequestNum
()
}
}
override
fun
onAdLoadFailed
(
ad
:
String
,
error
:
MaxError
)
{
override
fun
onAdLoadFailed
(
ad
:
String
,
error
:
MaxError
)
{
loadCallBack
?.
invoke
(
false
)
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
(
adEvent
as
AdMaxEvent
).
pullAd
(
null
,
error
)
(
adEvent
as
AdMaxEvent
).
pullAd
(
null
,
error
)
showCallBack
?.
adFailed
(
5
)
showCallBack
=
null
}
}
})
})
adState
.
currentAd
?.
loadAd
()
if
(!
adState
.
loadingAd
)
{
adState
.
loadingAd
=
true
adEvent
.
adPulStart
()
ad
?.
loadAd
()
}
}
}
}
...
...
app/src/main/java/com/base/appzxhy/ads/applovin/MaxNativeMgr.kt
View file @
fdd35a54
package
com.base.appzxhy.ads.applovin
package
com.base.appzxhy.ads.applovin
import
android.widget.FrameLayout
import
androidx.annotation.LayoutRes
import
androidx.annotation.LayoutRes
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
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.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.R
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.NativeParentView
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.helper.EventUtils
import
org.json.JSONObject
import
org.json.JSONObject
import
java.util.UUID
import
java.util.UUID
...
@@ -32,9 +30,10 @@ class MaxNativeMgr {
...
@@ -32,9 +30,10 @@ class MaxNativeMgr {
private
var
currentAd
:
MaxAd
?
=
null
private
var
currentAd
:
MaxAd
?
=
null
private
var
currentLoader
:
MaxNativeAdLoader
?
=
null
private
var
currentLoader
:
MaxNativeAdLoader
?
=
null
private
fun
loadAd
(
private
fun
loadAd
(
adMaxEvent
:
AdMaxEvent
,
adMaxEvent
:
AdMaxEvent
,
parent
:
FrameLayout
,
parent
:
NativeParentView
,
@LayoutRes
layout
:
Int
@LayoutRes
layout
:
Int
)
{
)
{
...
@@ -72,7 +71,7 @@ class MaxNativeMgr {
...
@@ -72,7 +71,7 @@ class MaxNativeMgr {
fun
show
(
fun
show
(
adMaxEvent
:
AdMaxEvent
,
adMaxEvent
:
AdMaxEvent
,
parent
:
FrameLayout
,
parent
:
NativeParentView
,
@LayoutRes
layout
:
Int
,
@LayoutRes
layout
:
Int
,
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
nativeCallBack
:
((
Any
?)
->
Unit
)?
=
null
)
{
)
{
...
@@ -106,41 +105,11 @@ class MaxNativeMgr {
...
@@ -106,41 +105,11 @@ class MaxNativeMgr {
val
obj
=
JSONObject
()
val
obj
=
JSONObject
()
obj
.
put
(
"ad_unit"
,
"nativeAd"
)
obj
.
put
(
"ad_unit"
,
"nativeAd"
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj
)
setMaxNativeAd
(
parent
,
layout
)
parent
.
setNativeAd
(
nativeLoader
!!
,
nativeAd
!!
,
layout
)
nativeCallBack
?.
invoke
(
nativeAd
)
nativeCallBack
?.
invoke
(
nativeAd
)
}
}
private
fun
adAvailable
():
Boolean
{
private
fun
adAvailable
():
Boolean
{
return
((
System
.
currentTimeMillis
()
-
lastTime
)
/
1000
/
60
).
toInt
()
<
30
return
((
System
.
currentTimeMillis
()
-
lastTime
)
/
1000
/
60
).
toInt
()
<
30
}
}
private
fun
setMaxNativeAd
(
parent
:
FrameLayout
,
layout
:
Int
)
{
// val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(R.layout.layout_max_native_custom)
// .setTitleTextViewId(R.id.title_text_view)
// .setBodyTextViewId(R.id.body_text_view)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
// .setIconImageViewId(R.id.icon_image_view)
// .setMediaContentViewGroupId(R.id.media_view_container)
// .setOptionsContentViewGroupId(R.id.options_view)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
// .setCallToActionButtonId(R.id.cta_button)
// .build()
// return MaxNativeAdView(binder, context)
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
()
val
maxNativeAdView
=
MaxNativeAdView
(
binder
,
parent
.
context
)
parent
.
removeAllViews
()
parent
.
addView
(
maxNativeAdView
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ads/applovin/MaxOpenMgr.kt
View file @
fdd35a54
package
com.base.appzxhy.ads.applovin
package
com.base.appzxhy.ads.applovin
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxAppOpenAd
import
com.applovin.mediation.ads.MaxAppOpenAd
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.GlobalConfig
import
com.base.appzxhy.MyApplication
import
com.base.appzxhy.ads.AdCountDownDialog.createUICountdownTimer
import
com.base.appzxhy.ads.AdCountDownDialog.showAdCountDownDialog
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdsType
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdEvent
import
com.base.appzxhy.ads.AdState
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.AdsShowCallBack
import
com.base.appzxhy.ads.LimitUtils
import
com.base.appzxhy.ads.LimitUtils
import
java.lang.ref.WeakReference
/**
/**
* 开屏广告加载显示管理类
* 开屏广告加载显示管理类
*/
*/
class
MaxOpenMgr
{
class
MaxOpenMgr
{
private
val
adState
=
MaxAdState
().
apply
{
private
val
adState
=
AdState
<
MaxAppOpenAd
>()
currentAd
=
MaxAppOpenAd
(
GlobalConfig
.
ID_MAX_OPEN
,
MyApplication
.
appContext
)
private
var
showCallBack
:
AdsShowCallBack
?
=
null
}
fun
show
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
fun
show
(
activity
:
Activity
,
isUnLimit
:
Boolean
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
showCallBack
?.
failed
(
0
)
return
}
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
INSERT
,
adEvent
))
{
showCallBack
?.
failed
(
1
)
return
}
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
showCallBack
?.
failed
(
2
)
return
return
}
}
if
(
showCallBack
!=
null
)
{
this
.
showCallBack
=
showCallBack
adState
.
activityRef
=
WeakReference
(
activity
)
adEvent
.
adPrepareShow
()
adEvent
.
adPrepareShow
()
}
if
(!
adState
.
loadingAd
)
{
val
loadingDialog
=
activity
.
showAdCountDownDialog
()
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
if
(!
adAvailable
())
{
showCallBack
?.
failed
()
loadAd
(
adEvent
)
{
flag
:
Boolean
->
return
if
(
flag
)
{
createUICountdownTimer
(
loadingDialog
)
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
}
}
}
else
{
if
(
LimitUtils
.
isIntervalLimited
(
adState
.
lastShowTime
,
adEvent
))
{
showCallBack
?.
failed
()
showCallBack
?.
failed
()
return
}
}
}
}
}
else
{
showReadyAd
(
activity
,
adEvent
,
showCallBack
)
if
(!
adAvailable
()
||
adState
.
currentAd
==
null
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
return
}
if
(
adState
.
currentAd
?.
isReady
!=
true
)
{
loadAd
(
activity
,
isUnLimit
,
adEvent
)
return
}
}
showReadyAd
(
activity
,
adEvent
)
}
}
private
fun
showReadyAd
(
activity
:
Activity
,
adEvent
:
AdEvent
,
showCallBack
:
AdsShowCallBack
?)
{
}
val
ad
=
adState
.
currentAd
as
MaxAppOpenAd
?
ad
?.
run
{
private
fun
showReadyAd
(
activity
:
Activity
,
adEvent
:
AdEvent
)
{
adState
.
currentAd
?.
run
{
setListener
(
object
:
MaxAdListener
{
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
=
Unit
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
=
Unit
override
fun
onAdDisplayed
(
ad
:
MaxAd
)
{
override
fun
onAdDisplayed
(
ad
:
MaxAd
)
{
adState
.
onAdDisplayed
()
adState
.
onAdDisplayed
()
showCallBack
?.
show
()
showCallBack
?.
show
()
LimitUtils
.
addDisplayNum
()
LimitUtils
.
addDisplayNum
()
(
adEvent
as
AdMaxEvent
).
showAd
(
ad
,
activity
::
class
.
simpleName
)
(
adEvent
as
AdMaxEvent
).
showAd
(
ad
,
activity
::
class
.
simpleName
)
}
}
...
@@ -78,7 +80,9 @@ class MaxOpenMgr {
...
@@ -78,7 +80,9 @@ class MaxOpenMgr {
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
adState
.
onAdHidden
()
adState
.
onAdHidden
()
showCallBack
?.
close
()
showCallBack
?.
close
()
loadAd
(
AdMaxEvent
(
"openAd"
,
"preload"
))
showCallBack
=
null
loadAd
(
activity
.
applicationContext
,
false
,
AdMaxEvent
(
"openAd"
,
"preload"
))
}
}
override
fun
onAdClicked
(
ad
:
MaxAd
)
{
override
fun
onAdClicked
(
ad
:
MaxAd
)
{
...
@@ -87,10 +91,14 @@ class MaxOpenMgr {
...
@@ -87,10 +91,14 @@ class MaxOpenMgr {
LimitUtils
.
addClickNum
()
LimitUtils
.
addClickNum
()
}
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
}
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
error
:
MaxError
)
{
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
error
:
MaxError
)
{
adState
.
onAdDisplayFailed
()
adState
.
onAdDisplayFailed
()
showCallBack
?.
adFailed
()
showCallBack
?.
adFailed
()
showCallBack
=
null
adEvent
.
adShowError
(
error
)
adEvent
.
adShowError
(
error
)
}
}
...
@@ -100,43 +108,60 @@ class MaxOpenMgr {
...
@@ -100,43 +108,60 @@ class MaxOpenMgr {
}
}
}
}
fun
loadAd
(
fun
loadAd
(
context
:
Context
,
isUnLimit
:
Boolean
,
adEvent
:
AdEvent
)
{
adEvent
:
AdEvent
,
loadCallBack
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
)
{
if
(!
isUnLimit
)
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
if
(!
LimitUtils
.
isAdShow
(
AdsType
.
OPEN
,
adEvent
))
{
loadCallBack
?.
invoke
(
false
)
this
.
showCallBack
?.
close
()
this
.
showCallBack
=
null
return
return
}
}
val
ad
=
adState
.
currentAd
as
MaxAppOpenAd
?
}
ad
?.
setListener
(
object
:
MaxAdListener
{
if
(!
adState
.
loadingAd
)
{
adState
.
loadingAd
=
true
adEvent
.
adPulStart
()
adState
.
currentAd
=
MaxAppOpenAd
(
GlobalConfig
.
ID_MAX_OPEN
,
context
)
adState
.
currentAd
?.
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
ad
:
MaxAd
)
{
override
fun
onAdLoaded
(
ad
:
MaxAd
)
{
adState
.
onAdLoaded
()
adState
.
onAdLoaded
(
null
)
loadCallBack
?.
invoke
(
true
)
val
ac
=
adState
.
activityRef
?.
get
()
if
(
ac
!=
null
)
{
show
(
ac
,
isUnLimit
,
adEvent
,
null
)
}
(
adEvent
as
AdMaxEvent
).
pullAd
(
ad
)
(
adEvent
as
AdMaxEvent
).
pullAd
(
ad
)
LimitUtils
.
addRequestNum
()
LimitUtils
.
addRequestNum
()
}
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
}
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
}
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
}
override
fun
onAdLoadFailed
(
p0
:
String
,
error
:
MaxError
)
{
override
fun
onAdLoadFailed
(
p0
:
String
,
error
:
MaxError
)
{
adState
.
onAdLoadFailed
()
adState
.
onAdLoadFailed
()
showCallBack
?.
adFailed
()
showCallBack
=
null
(
adEvent
as
AdMaxEvent
).
pullAd
(
null
,
error
)
(
adEvent
as
AdMaxEvent
).
pullAd
(
null
,
error
)
loadCallBack
?.
invoke
(
false
)
}
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
override
fun
onAdHidden
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdClicked
(
p0
:
MaxAd
)
=
Unit
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
=
Unit
})
if
(!
adState
.
loadingAd
)
{
}
adState
.
loadingAd
=
true
adEvent
.
adPulStart
(
)
}
)
ad
?.
loadAd
()
ad
State
.
currentAd
?.
loadAd
()
}
}
}
}
private
fun
adAvailable
()
=
((
System
.
currentTimeMillis
()
-
adState
.
lastLoadTime
)
/
1000
/
60
).
toInt
()
<
30
fun
adAvailable
()
=
((
System
.
currentTimeMillis
()
-
adState
.
lastLoadTime
)
/
1000
/
60
).
toInt
()
<
30
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/bean/config/AdConfigBean.kt
View file @
fdd35a54
package
com.base.appzxhy.bean.config
package
com.base.appzxhy.bean.config
class
AdConfigBean
(
class
AdConfigBean
(
var
isAdShow
:
Boolean
=
false
,
//广告开关
var
isAdShow
:
Boolean
=
true
,
//广告开关
var
adSwitch
:
Boolean
=
true
,
//true 走admob,false走max
var
adSwitch
:
Boolean
=
true
,
//true 走admob,false走max
var
numDisplayLimit
:
Int
=
-
1
,
var
numRequestLimit
:
Int
=
-
1
,
var
taichiAdValue
:
Int
=
1
,
//价值上报阀值
var
numClickLimit
:
Int
=
-
1
,
var
adRatio
:
Int
=
100
,
//价值上报随机控制
var
timeInterval
:
Int
=
1
,
var
numDisplayLimit
:
Int
=
-
1
,
//展示次数限制
var
openAdLoading
:
Int
=
15
,
var
numRequestLimit
:
Int
=
-
1
,
//请求次数限制
var
functionBackShowAd
:
Boolean
=
true
,
var
numClickLimit
:
Int
=
-
1
,
//点击次数限制
var
functionInShowAd
:
Boolean
=
true
,
var
timeInterval
:
Int
=
1
,
//广告间隔
var
openAdLoading
:
Int
=
15
,
//开屏广告拉取时间
var
functionBackShowAd
:
Boolean
=
true
,
//功能退出显示广告
var
functionInShowAd
:
Boolean
=
true
,
//功能进入显示广告
)
{
)
{
companion
object
{
companion
object
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment