應用打開廣告-
我想用第一次啟動“onStart() 函式”來展示廣告,但是,問題是廣告在我退出應用程式后在 onResume() 函式中顯示的第一次啟動(onStart() 函式)中不顯示并恢復它。
有沒有任何建議或編輯家伙?
我的應用程式類
class MyApplication : Application() {
private var appOpenManager: AppOpenManager? = null
override fun onCreate() {
super.onCreate()
MobileAds.initialize(this) {
Log.d("tag", "MobileAds init ")
}
appOpenManager = AppOpenManager(this)
ProcessLifecycleOwner.get().lifecycle.addObserver(appOpenManager!!.defaultLifecycleObserver)
}
}
AppOpenManager 類
class AppOpenManager(private val myApplication: MyApplication) :
Application.ActivityLifecycleCallbacks,
LifecycleObserver {
private var appOpenAd: AppOpenAd? = null
private var loadCallback: AppOpenAd.AppOpenAdLoadCallback? = null
private var currentActivity: Activity? = null
private var isShowingAd = false
private val adRequest: AdRequest
get() = AdRequest.Builder().build()
private val isAdAvailable: Boolean
get() = appOpenAd != null
companion object {
private const val AD_UNIT_ID = "ca-app-pub-3940256099942544/3419835294" //test id
}
init {
myApplication.registerActivityLifecycleCallbacks(this)
}
private fun fetchAd() {
if (isAdAvailable) {
return
} else {
Log.d("tag", "fetching... ")
loadCallback = object : AppOpenAd.AppOpenAdLoadCallback() {
override fun onAdFailedToLoad(p0: LoadAdError) {
super.onAdFailedToLoad(p0)
Log.d("tag", "onAppOpenAdFailedToLoad: ")
}
override fun onAdLoaded(ad: AppOpenAd) {
super.onAdLoaded(ad)
appOpenAd = ad
Log.d("tag", "isAdAvailable = true")
}
}
val request = adRequest
AppOpenAd.load(
myApplication,
AD_UNIT_ID,
request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
loadCallback!!
)
}
}
fun showAdIfAvailable() {
Log.d("tag", "$isShowingAd - $isAdAvailable")
if (!isShowingAd && isAdAvailable) {
Log.d("tag", "will show ad ")
val fullScreenContentCallback: FullScreenContentCallback =
object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
appOpenAd = null
isShowingAd = false
fetchAd()
}
override fun onAdFailedToShowFullScreenContent(p0: AdError) {
}
override fun onAdShowedFullScreenContent() {
isShowingAd = true
}
}
appOpenAd!!.fullScreenContentCallback = fullScreenContentCallback
appOpenAd!!.show(currentActivity!!)
} else {
Log.d("tag", "can't show ad ")
fetchAd()
}
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
currentActivity = activity
}
override fun onActivityStarted(activity: Activity) {
currentActivity = activity
}
override fun onActivityResumed(activity: Activity) {
currentActivity = activity
}
override fun onActivityPaused(activity: Activity) {
}
override fun onActivityStopped(activity: Activity) {
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
currentActivity = activity
}
override fun onActivityDestroyed(activity: Activity) {
currentActivity = null
}
var defaultLifecycleObserver = object : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
Log.d("tag", "onStart()")
showAdIfAvailable()
}
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d("tag", "onCreate() ")
}
}
}
uj5u.com熱心網友回復:
onStartshowAdIfAvailable()只顯示一個 ifisAdAvailable為true的呼叫,但它被初始化為false - 所以它fetchAd()改為呼叫。所做的只是存盤一個廣告(下次點擊時isAdAvailable也是如此onStart)。
也許您想showAdIfAvailable()在獲取成功回呼時再次呼叫?
override fun onAdLoaded(ad: AppOpenAd) {
super.onAdLoaded(ad)
appOpenAd = ad
Log.d("tag", "isAdAvailable = true")
// you got an ad - try and display it
showAdIfAvailable()
}
請注意,因為您的廣告是異步獲取的,您的廣告可能Activity會在該請求仍在進行時被銷毀。這意味著您將設定currentActivity為null,您的 fetch 將成功并運行showAdIfAvailable,并且嘗試使用currentActivity.
你需要空檢查 - 這些!!東西都沒有
if (!isShowingAd && isAdAvailable) {
val fullScreenContentCallback = object : FullScreenContentCallback() {
...
}
// ensure neither of these are null -while we're using them-
// let and run basically create new variables that can't be changed by callbacks etc
currentActivity?.let { activity ->
appOpenAd?.run {
fullScreenContentCallback = fullScreenContentCallback
show(activity)
}
}
不一定是最優雅的方式(最好先進行空檢查,這樣你就不需要做任何你不需要的事情,比如創建可能不會使用的回呼物件)但我不想重寫你的代碼。你有希望得到這個想法!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498216.html
