Commit 33f475df authored by wanglei's avatar wanglei

...

parent eacf3173
......@@ -40,9 +40,6 @@ android {
}
buildTypes {
debug {
signingConfig = signingConfigs.getByName("release")
}
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
......@@ -113,6 +110,8 @@ dependencies {
implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-database-ktx")
implementation("com.google.firebase:firebase-config-ktx")
//facebook
implementation("com.facebook.android:facebook-android-sdk:[8,9)")
......
package com.base.pdfviewerscannerwhite.ads
import com.base.pdfviewerscannerwhite.helper.EventUtils
import com.base.pdfviewerscannerwhite.helper.MyApplication
import com.google.android.gms.ads.MobileAds
import java.util.concurrent.atomic.AtomicBoolean
object AdmobHelper {
//展示广告关闭时赋值
var lastShowedOnHiddenTime = 0L
var isAdInit = AtomicBoolean(false)
fun initAdmobAd() {
MobileAds.initialize(MyApplication.context) { initializationStatus ->
isAdInit.set(true)
EventUtils.event("AdmobInit", "AdmobInit")
}
}
}
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ads
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.google.firebase.ktx.Firebase
import com.google.firebase.remoteconfig.ConfigUpdate
import com.google.firebase.remoteconfig.ConfigUpdateListener
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigException
import com.google.firebase.remoteconfig.ktx.get
import com.google.firebase.remoteconfig.ktx.remoteConfig
import com.google.firebase.remoteconfig.ktx.remoteConfigSettings
object RemoteConfigHelper {
private val TAG = "RemoteConfigHelper"
fun test() {
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
//提取并激活值
remoteConfig.fetchAndActivate().addOnCompleteListener { task ->
if (task.isSuccessful) {
val aa = remoteConfig["a"].asString()
LogEx.logDebug(TAG, "fetchAndActivate aa=$aa")
}
}
//监听跟新值
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
override fun onUpdate(configUpdate: ConfigUpdate) {
remoteConfig.activate().addOnCompleteListener {
val aa2 = remoteConfig["a"].asString()
LogEx.logDebug(TAG, "onUpdate aa=$aa2")
}
}
override fun onError(error: FirebaseRemoteConfigException) {
}
})
}
}
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ads.admob
object AdmobHelper {
//展示广告关闭时赋值
var lastShowedOnHiddenTime = 0L
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import com.base.pdfviewerscannerwhite.ads.AdDisplayUtils
import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.clickAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.pullAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.showAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobHelper.lastShowedOnHiddenTime
import com.base.pdfviewerscannerwhite.ads.AdmobHelper.lastShowedOnHiddenTime
import com.base.pdfviewerscannerwhite.helper.ConfigHelper
import com.base.pdfviewerscannerwhite.helper.EventUtils
import com.base.pdfviewerscannerwhite.helper.MyApplication
......@@ -152,7 +152,7 @@ object AdmobInterstitialUtils {
thisInterAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdClicked() {
clickAd(thisInterAd?.responseInfo, "interAd")
AdDisplayUtils.incrementInterAdClickCount()
AdDisplayUtils.incrementInterClickCount()
}
override fun onAdDismissedFullScreenContent() {
......@@ -172,7 +172,7 @@ object AdmobInterstitialUtils {
override fun onAdShowedFullScreenContent() {
dialog?.dismiss()
showAd(thisInterAd?.responseInfo, "interAd", activity)
AdDisplayUtils.incrementInterAdDisplayCount()
AdDisplayUtils.incrementInterShowCount()
adLastDisplayTime = System.currentTimeMillis() / 1000
}
}
......
......@@ -24,7 +24,11 @@ object AdmobOpenUtils {
private val mRequest = AdRequest.Builder().build()
private var openLoadTime = Long.MAX_VALUE
private var mOpenAd: AppOpenAd? = null
fun isOpenAdLoaded() = mOpenAd != null
private fun isAdExpired(): Boolean {
return System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60
}
fun loadAppOpenAd(skip: Boolean = false, onLoad: ((where: Int) -> Unit)? = null) {
......@@ -79,7 +83,7 @@ object AdmobOpenUtils {
onHidden?.invoke(false)
return
}
if (System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60) {
if (isAdExpired()) {
LogEx.logDebug(TAG, "openLoadTime out time")
mOpenAd = null
loadAppOpenAd()
......
......@@ -33,26 +33,26 @@ class NativeView(context: Context, val layout: Int, attrs: AttributeSet? = null)
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
adView.mediaView?.mediaContent = nativeAd.mediaContent
if (nativeAd.body == null) {
adView.bodyView!!.visibility = View.INVISIBLE
adView.bodyView?.visibility = View.INVISIBLE
} else {
adView.bodyView!!.visibility = View.VISIBLE
adView.bodyView?.visibility = View.VISIBLE
(adView.bodyView as TextView?)?.text = nativeAd.body
}
if (nativeAd.callToAction == null) {
adView.callToActionView!!.visibility = View.INVISIBLE
adView.callToActionView?.visibility = View.INVISIBLE
} else {
adView.callToActionView!!.visibility = View.VISIBLE
adView.callToActionView?.visibility = View.VISIBLE
(adView.callToActionView as Button?)?.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
adView.iconView!!.visibility = View.GONE
adView.iconView?.visibility = View.GONE
} else {
(adView.iconView as ImageView?)?.setImageDrawable(
nativeAd.icon!!.drawable
nativeAd.icon?.drawable
)
adView.iconView!!.visibility = View.VISIBLE
adView.iconView?.visibility = View.VISIBLE
}
adView.setNativeAd(nativeAd)
......
......@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.ads.FirebaseDatabase
import com.base.pdfviewerscannerwhite.ads.RemoteConfigHelper
import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.ConstObject.BOOKMARK_DATA_TYPE
import com.base.pdfviewerscannerwhite.bean.ConstObject.DOCUMENT_DATA_TYPE
......@@ -61,6 +62,7 @@ class MainActivity : BaseActivity<ActivityMain2Binding>(), MainView {
FirebaseDatabase.saveDatabase2Sp()
RemoteConfigHelper.test()
}
override fun onResume() {
......
......@@ -7,6 +7,8 @@ import android.graphics.Color
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.ads.AdmobHelper.initAdmobAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobOpenUtils
import com.base.pdfviewerscannerwhite.bean.ConstObject.ifAgreePrivacy
import com.base.pdfviewerscannerwhite.databinding.ActivitySplashBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity
......@@ -54,10 +56,20 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView {
}
override fun showAd() {
// jumpNext()
AdmobOpenUtils.loadAppOpenAd {
AdmobOpenUtils.showAppOpenAd(this, showBefore = {
if (it) {
splashPresenter.pauseJumpJob()
}
}, onHidden = {
jumpNext()
})
}
}
override fun agreePrivacy() {
initAdmobAd()
showAd()
startProgressJob()
splashPresenter.startJumpJob(lifecycleScope)
......
package com.base.pdfviewerscannerwhite.ui.splash
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfviewerscannerwhite.ads.FirebaseDatabase.open_ad_loading
import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
......@@ -14,21 +16,21 @@ class SplashPresenter(
private var jumpJob: Job? = null
var loadingTime = 2L
var loadingTime = AppPreferences.getInstance().getString(open_ad_loading, "15").toInt()
/**
* 超时跳转
*/
fun startJumpJob(lifecycleCoroutineScope: LifecycleCoroutineScope) {
if (ConstObject.ifAgreePrivacy) {
if (jumpJob == null) {
val startTime = System.currentTimeMillis()
jumpJob = lifecycleCoroutineScope.launch {
delay(loadingTime * 1000)
val endTime = System.currentTimeMillis()
LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}")
splashView.jumpNext()
}
AppPreferences.getInstance().put(open_ad_loading, "8")
if (jumpJob == null) {
val startTime = System.currentTimeMillis()
jumpJob = lifecycleCoroutineScope.launch {
LogEx.logDebug(TAG, "loadingTime=$loadingTime")
delay(loadingTime * 1000L)
val endTime = System.currentTimeMillis()
LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}")
splashView.jumpNext()
}
}
}
......
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap xmlns:android="http://schemas.android.com/apk/res/android">
<entry>
<key>welcome_message</key>
<defaultValue>"Welcome, user!"</defaultValue>
</entry>
</defaultsMap>
\ 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