Ошибка при инициализации Interstitial ads

У меня есть синглтон класс для загрузки и показа рекламы

object AdmobProvider {
    var countLoadAds = 0

    lateinit var mInterstitialAd: InterstitialAd
    private val adRequest = AdRequest.Builder().build()

    fun init(activity: Activity) {
        MobileAds.initialize(activity)
        initInterstitial(activity)
    }

    private fun initInterstitial(context: Activity) {
        mInterstitialAd = InterstitialAd(context)
        if (!SubscriptionProvider.hasSubscription()) {

            mInterstitialAd.adUnitId = context.getString(R.string.interstitial_video)
            mInterstitialAd.loadAd(adRequest)

            mInterstitialAd.adListener = object : AdListener() {
                override fun onAdClosed() {
                    super.onAdClosed()
                    Log.i("AdmobProvider", "onAdClosed: ")
                }

                override fun onAdFailedToLoad(p0: Int) {
                    super.onAdFailedToLoad(p0)
                    countLoadAds++
                    Log.i("AdmobProvider", "onAdFailedToLoad: $countLoadAds")
                    if (countLoadAds <= 3) {
                        initInterstitial(context)
                    } else {
                        callback?.Failed(true)
                    }
                }

                override fun onAdOpened() {
                    super.onAdOpened()
                    Log.i("AdmobProvider", "onAdOpened: ")

                }

                override fun onAdLoaded() {
                    super.onAdLoaded()
                    Log.i("AdmobProvider", "onAdLoaded: ")
                    if (mInterstitialAd.isLoaded) {
                        callback?.Success(true)
                    }
                }
            }
        }
    }

    fun showInterstitial() {
        if (mInterstitialAd.isLoaded) {
            mInterstitialAd.show()
        }
    }

}

Я загружаю рекламу в

ActivityA

AdmobProvider.init(this)
AdmobProvider.addAdmobProviderCallback(this)


override fun Success(state: Boolean) {
   Handler().postDelayed({
     val intent = Intent(this@ActivityA, ActivityB::class.java)
     intent.putExtra("ActivityA", 1)
     startActivity(intent)
     finish()
   }, 200)
}

И показываю в

ActivityB

if (intent.getIntExtra("ActivityA", 0) == 1) {
   AdmobProvider.showInterstitial()
}

Пока тестировал на телефоне и эмуляторах все нормально было, а в метрику от пользователей стал прилетать краш во втором активити, в основном на Android 8+ есть и версиях ниже, но гораздо реже.

java.lang.RuntimeException: Unable to start activity ComponentInfo{MainActivity}: d.m: lateinit property mInterstitialAd has not been initialized
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3455)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3598)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2164)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:241)
    at android.app.ActivityThread.main(ActivityThread.java:7582)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Caused by: d.m: lateinit property mInterstitialAd has not been initialized
    at .b.i(Unknown Source)
    at .MainActivity.onCreate(Unknown Source)
    at android.app.Activity.performCreate(Activity.java:7822)
    at android.app.Activity.performCreate(Activity.java:7811)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1328)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430)

Я понимаю в чем ошибка, но не могу понять как правильно пофиксить, ведь если я инициализирую рекламу во втором активити, мне ее и грузить там же надо будет, а мне это не подходит. Если верить метрике то в 88% случаев краш происходит в background. Подскажите пожалуйста, как правильно исправить!?


Ответы (0 шт):