Commit 33f475df authored by wanglei's avatar wanglei

...

parent eacf3173
...@@ -40,9 +40,6 @@ android { ...@@ -40,9 +40,6 @@ android {
} }
buildTypes { buildTypes {
debug {
signingConfig = signingConfigs.getByName("release")
}
release { release {
isMinifyEnabled = false isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
...@@ -113,6 +110,8 @@ dependencies { ...@@ -113,6 +110,8 @@ dependencies {
implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-database-ktx") implementation("com.google.firebase:firebase-database-ktx")
implementation("com.google.firebase:firebase-config-ktx")
//facebook //facebook
implementation("com.facebook.android:facebook-android-sdk:[8,9)") 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 ...@@ -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.clickAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.pullAd import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.pullAd
import com.base.pdfviewerscannerwhite.ads.admob.AdmobEvent.showAd 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.ConfigHelper
import com.base.pdfviewerscannerwhite.helper.EventUtils import com.base.pdfviewerscannerwhite.helper.EventUtils
import com.base.pdfviewerscannerwhite.helper.MyApplication import com.base.pdfviewerscannerwhite.helper.MyApplication
...@@ -152,7 +152,7 @@ object AdmobInterstitialUtils { ...@@ -152,7 +152,7 @@ object AdmobInterstitialUtils {
thisInterAd?.fullScreenContentCallback = object : FullScreenContentCallback() { thisInterAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdClicked() { override fun onAdClicked() {
clickAd(thisInterAd?.responseInfo, "interAd") clickAd(thisInterAd?.responseInfo, "interAd")
AdDisplayUtils.incrementInterAdClickCount() AdDisplayUtils.incrementInterClickCount()
} }
override fun onAdDismissedFullScreenContent() { override fun onAdDismissedFullScreenContent() {
...@@ -172,7 +172,7 @@ object AdmobInterstitialUtils { ...@@ -172,7 +172,7 @@ object AdmobInterstitialUtils {
override fun onAdShowedFullScreenContent() { override fun onAdShowedFullScreenContent() {
dialog?.dismiss() dialog?.dismiss()
showAd(thisInterAd?.responseInfo, "interAd", activity) showAd(thisInterAd?.responseInfo, "interAd", activity)
AdDisplayUtils.incrementInterAdDisplayCount() AdDisplayUtils.incrementInterShowCount()
adLastDisplayTime = System.currentTimeMillis() / 1000 adLastDisplayTime = System.currentTimeMillis() / 1000
} }
} }
......
...@@ -24,7 +24,11 @@ object AdmobOpenUtils { ...@@ -24,7 +24,11 @@ object AdmobOpenUtils {
private val mRequest = AdRequest.Builder().build() private val mRequest = AdRequest.Builder().build()
private var openLoadTime = Long.MAX_VALUE private var openLoadTime = Long.MAX_VALUE
private var mOpenAd: AppOpenAd? = null 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) { fun loadAppOpenAd(skip: Boolean = false, onLoad: ((where: Int) -> Unit)? = null) {
...@@ -79,7 +83,7 @@ object AdmobOpenUtils { ...@@ -79,7 +83,7 @@ object AdmobOpenUtils {
onHidden?.invoke(false) onHidden?.invoke(false)
return return
} }
if (System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60) { if (isAdExpired()) {
LogEx.logDebug(TAG, "openLoadTime out time") LogEx.logDebug(TAG, "openLoadTime out time")
mOpenAd = null mOpenAd = null
loadAppOpenAd() loadAppOpenAd()
......
...@@ -33,26 +33,26 @@ class NativeView(context: Context, val layout: Int, attrs: AttributeSet? = null) ...@@ -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.callToActionView = adView.findViewById(R.id.ad_call_to_action)
adView.iconView = adView.findViewById(R.id.ad_app_icon) adView.iconView = adView.findViewById(R.id.ad_app_icon)
(adView.headlineView as TextView?)?.text = nativeAd.headline (adView.headlineView as TextView?)?.text = nativeAd.headline
adView.mediaView!!.mediaContent = nativeAd.mediaContent adView.mediaView?.mediaContent = nativeAd.mediaContent
if (nativeAd.body == null) { if (nativeAd.body == null) {
adView.bodyView!!.visibility = View.INVISIBLE adView.bodyView?.visibility = View.INVISIBLE
} else { } else {
adView.bodyView!!.visibility = View.VISIBLE adView.bodyView?.visibility = View.VISIBLE
(adView.bodyView as TextView?)?.text = nativeAd.body (adView.bodyView as TextView?)?.text = nativeAd.body
} }
if (nativeAd.callToAction == null) { if (nativeAd.callToAction == null) {
adView.callToActionView!!.visibility = View.INVISIBLE adView.callToActionView?.visibility = View.INVISIBLE
} else { } else {
adView.callToActionView!!.visibility = View.VISIBLE adView.callToActionView?.visibility = View.VISIBLE
(adView.callToActionView as Button?)?.text = nativeAd.callToAction (adView.callToActionView as Button?)?.text = nativeAd.callToAction
} }
if (nativeAd.icon == null) { if (nativeAd.icon == null) {
adView.iconView!!.visibility = View.GONE adView.iconView?.visibility = View.GONE
} else { } else {
(adView.iconView as ImageView?)?.setImageDrawable( (adView.iconView as ImageView?)?.setImageDrawable(
nativeAd.icon!!.drawable nativeAd.icon?.drawable
) )
adView.iconView!!.visibility = View.VISIBLE adView.iconView?.visibility = View.VISIBLE
} }
adView.setNativeAd(nativeAd) adView.setNativeAd(nativeAd)
......
...@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment ...@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.R import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.ads.FirebaseDatabase import com.base.pdfviewerscannerwhite.ads.FirebaseDatabase
import com.base.pdfviewerscannerwhite.ads.RemoteConfigHelper
import com.base.pdfviewerscannerwhite.bean.ConstObject import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.ConstObject.BOOKMARK_DATA_TYPE import com.base.pdfviewerscannerwhite.bean.ConstObject.BOOKMARK_DATA_TYPE
import com.base.pdfviewerscannerwhite.bean.ConstObject.DOCUMENT_DATA_TYPE import com.base.pdfviewerscannerwhite.bean.ConstObject.DOCUMENT_DATA_TYPE
...@@ -61,6 +62,7 @@ class MainActivity : BaseActivity<ActivityMain2Binding>(), MainView { ...@@ -61,6 +62,7 @@ class MainActivity : BaseActivity<ActivityMain2Binding>(), MainView {
FirebaseDatabase.saveDatabase2Sp() FirebaseDatabase.saveDatabase2Sp()
RemoteConfigHelper.test()
} }
override fun onResume() { override fun onResume() {
......
...@@ -7,6 +7,8 @@ import android.graphics.Color ...@@ -7,6 +7,8 @@ import android.graphics.Color
import android.os.Build import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope 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.bean.ConstObject.ifAgreePrivacy
import com.base.pdfviewerscannerwhite.databinding.ActivitySplashBinding import com.base.pdfviewerscannerwhite.databinding.ActivitySplashBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
...@@ -54,10 +56,20 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView { ...@@ -54,10 +56,20 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView {
} }
override fun showAd() { override fun showAd() {
// jumpNext() AdmobOpenUtils.loadAppOpenAd {
AdmobOpenUtils.showAppOpenAd(this, showBefore = {
if (it) {
splashPresenter.pauseJumpJob()
}
}, onHidden = {
jumpNext()
})
}
} }
override fun agreePrivacy() { override fun agreePrivacy() {
initAdmobAd()
showAd() showAd()
startProgressJob() startProgressJob()
splashPresenter.startJumpJob(lifecycleScope) splashPresenter.startJumpJob(lifecycleScope)
......
package com.base.pdfviewerscannerwhite.ui.splash package com.base.pdfviewerscannerwhite.ui.splash
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfviewerscannerwhite.ads.FirebaseDatabase.open_ad_loading
import com.base.pdfviewerscannerwhite.bean.ConstObject import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.base.pdfviewerscannerwhite.utils.LogEx import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
...@@ -14,24 +16,24 @@ class SplashPresenter( ...@@ -14,24 +16,24 @@ class SplashPresenter(
private var jumpJob: Job? = null private var jumpJob: Job? = null
var loadingTime = 2L var loadingTime = AppPreferences.getInstance().getString(open_ad_loading, "15").toInt()
/** /**
* 超时跳转 * 超时跳转
*/ */
fun startJumpJob(lifecycleCoroutineScope: LifecycleCoroutineScope) { fun startJumpJob(lifecycleCoroutineScope: LifecycleCoroutineScope) {
if (ConstObject.ifAgreePrivacy) { AppPreferences.getInstance().put(open_ad_loading, "8")
if (jumpJob == null) { if (jumpJob == null) {
val startTime = System.currentTimeMillis() val startTime = System.currentTimeMillis()
jumpJob = lifecycleCoroutineScope.launch { jumpJob = lifecycleCoroutineScope.launch {
delay(loadingTime * 1000) LogEx.logDebug(TAG, "loadingTime=$loadingTime")
delay(loadingTime * 1000L)
val endTime = System.currentTimeMillis() val endTime = System.currentTimeMillis()
LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}") LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}")
splashView.jumpNext() 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