AndroidAdmobInterstitialAd已弃用

更新后com.google.android.gms:play-services-ads19.7.0
它说InterstitialAdRewardedVideoAdUnifiedNativeAdView弃用。

有人可以帮忙吗?

回答

经过快速搜索,我发现我们需要使用

public abstract class InterstitialAd extends Object

代替

public final class InterstitialAd extends Object

所以你需要使用:

com.google.android.gms.ads.interstitial.InterstitialAd

代替:

come.google.android.gms.ads

这就是我们与新包交互的方式:

public class AdManager 
{
    private var interstitialAd: InterstitialAd? = null
    private var mRewardedVideoAd: RewardedAd? = null
    private var currentNativeAd: NativeAd? = null
    private var builder: AdLoader.Builder? = null



    init {
        RequestConfiguration.Builder().setTestDeviceIds(
            listOf(
                AdRequest.DEVICE_ID_EMULATOR,
                "CE88B9A1CB213EEEA19A2F7E54993908"
            )
        )
    }
    // Create a full screen content callback.
    val fullScreenContentCallback = object : FullScreenContentCallback() {
        override fun onAdFailedToShowFullScreenContent(p0: AdError) {
            super.onAdFailedToShowFullScreenContent(p0)
        }

        override fun onAdShowedFullScreenContent() {
            super.onAdShowedFullScreenContent()
        }

        override fun onAdDismissedFullScreenContent() {
            super.onAdDismissedFullScreenContent()
            interstitialAd = null
            mRewardedVideoAd = null
        }

    }

    fun createInterstitialAd(context: Context) {
     
            InterstitialAd.load(
                context,
                BuildConfig.ADMOB_AD_INTERSTITIAL_UNIT_ID,
                request.build(),
                object : InterstitialAdLoadCallback() {
                    override fun onAdLoaded(ad: InterstitialAd) {
                        interstitialAd = ad
                        interstitialAd?.fullScreenContentCallback = fullScreenContentCallback
                    }

                })
        }
    }

    fun getFullScreenAd(): InterstitialAd? {
        return interstitialAd
    }

    fun getVideoAd(): RewardedAd? {
        return mRewardedVideoAd
    }

    fun loadRewardedVideoAd(context: Context) {
        if (!userManager.getCurrentUser().isPremium) {
            val request = AdRequest.Builder()
     

            RewardedAd.load(
                context,
                BuildConfig.ADMOB_AD_VIDEO_UNIT_ID,
                AdRequest.Builder().build(),
                object : RewardedAdLoadCallback() {
                    override fun onAdLoaded(ad: RewardedAd) {
                        super.onAdLoaded(ad)
                        mRewardedVideoAd = ad;
                        mRewardedVideoAd?.fullScreenContentCallback = fullScreenContentCallback;
                    }
                    override fun onAdFailedToLoad(p0: LoadAdError) {
                        super.onAdFailedToLoad(p0)

                    }
                })
        }
   

    fun loadNativeAd(context: Activity,adFrame:FrameLayout) {
      
            builder = AdLoader.Builder(context, BuildConfig.ADMOB_AD_UNIT_ID_DIALOG_NATIVE)
            builder?.forNativeAd { unifiedNativeAd: NativeAd ->
                val adView: View =
                    context.layoutInflater.inflate(R.layout.ad_unified, null)
                val ad = adView as NativeAdView
                populateUnifiedNativeAdView(unifiedNativeAd, ad)
                adFrame.removeAllViews()
                adFrame.addView(ad)
            }
            val adLoader = builder?.withAdListener(object : AdListener() {
                override fun onAdFailedToLoad(i: LoadAdError) {
                    super.onAdFailedToLoad(i)
                    Log.e("NativeAdFailed", i.toString() + "")
                }
            })?.build()
            val builder = AdManagerAdRequest.Builder()
            adLoader?.loadAd(builder.build())
        }
    }


    private fun populateUnifiedNativeAdView(
        nativeAd: NativeAd,
        adView: NativeAdView
    ) {
        // You must call destroy on old ads when you are done with them,
        // otherwise you will have a memory leak.
        if (currentNativeAd != null) currentNativeAd?.destroy()
        currentNativeAd = nativeAd

        // Set the media view.
        adView.mediaView = adView.findViewById<View>(R.id.ad_media) as com.google.android.gms.ads.nativead.MediaView

        // Set other ad assets.
        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.priceView = adView.findViewById(R.id.ad_price)
        adView.starRatingView = adView.findViewById(R.id.ad_stars)
        adView.storeView = adView.findViewById(R.id.ad_store)
        adView.advertiserView = adView.findViewById(R.id.ad_advertiser)

        // The headline and media content are guaranteed to be in every UnifiedNativeAd.
        (adView.headlineView as TextView).text = nativeAd.headline
        nativeAd.mediaContent?.let {
            adView.mediaView?.setMediaContent(it)

        }

        // These assets aren't guaranteed to be in every UnifiedNativeAd, so it's important to
        // check before trying to display them.
        if (nativeAd.body == null) {
            adView.bodyView?.visibility = View.INVISIBLE
        } else {
            adView.bodyView?.visibility = View.VISIBLE
            (adView.bodyView as TextView).text = nativeAd.body
        }
        if (nativeAd.callToAction == null) {
            adView.callToActionView?.visibility = View.INVISIBLE
        } else {
            adView.callToActionView?.visibility = View.VISIBLE
            (adView.callToActionView as TextView).text = nativeAd.callToAction
        }
        if (nativeAd.icon == null) {
            adView.iconView?.visibility = View.GONE
        } else {
            (adView.iconView as ImageView).setImageDrawable(
                nativeAd.icon?.drawable
            )
            adView.iconView?.visibility = View.VISIBLE
        }
        if (nativeAd.price == null) {
            adView.priceView?.visibility = View.INVISIBLE
        } else {
            adView.priceView?.visibility = View.VISIBLE
            (adView.priceView as TextView).text = nativeAd.price
        }
        if (nativeAd.store == null) {
            adView.storeView?.visibility = View.INVISIBLE
        } else {
            adView.storeView?.visibility = View.VISIBLE
            (adView.storeView as TextView).text = nativeAd.store
        }
        if (nativeAd.starRating == null) {
            adView.starRatingView?.visibility = View.INVISIBLE
        } else {
            nativeAd.starRating?.toDouble()?.let {
                (adView.starRatingView as RatingBar).rating = it.toFloat()
                adView.starRatingView?.visibility = View.VISIBLE
            }


        }
        if (nativeAd.advertiser == null) {
            adView.advertiserView?.visibility = View.INVISIBLE
        } else {
            (adView.advertiserView as TextView).text = nativeAd.advertiser
            adView.advertiserView?.visibility = View.VISIBLE
        }

        // This method tells the Google Mobile Ads SDK that you have finished populating your
        // native ad view with this native ad.
        adView.setNativeAd(nativeAd)
    }
}


回答

20.0.0 版中有许多重大更改。19.7.0 版引入了许多新的 API,并弃用或重命名了许多类,为 20.0.0 版做准备。

此代码解释了如何在 v 19.7.0 中集成插页式广告

class Web : AppCompatActivity() {
    private var mInterstitialAd: InterstitialAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_web)

        // load ad
        loadAd();

        toNextLevel()
    }

    // load ad
    private fun loadAd() {
        InterstitialAd.load(
            this@Web,
            "ca-app-pub-3940256099942544/1033173712",
            AdRequest.Builder().build(),
            object : InterstitialAdLoadCallback() {
                override fun onAdLoaded(interstitialAd: InterstitialAd) {
                    // The mInterstitialAd reference will be null until
                    // an ad is loaded.
                    mInterstitialAd = interstitialAd
                    mInterstitialAd?.fullScreenContentCallback =
                        object : FullScreenContentCallback() {
                            override fun onAdDismissedFullScreenContent() {
                                super.onAdDismissedFullScreenContent()
                                mInterstitialAd = null

                                //// perform your code that you wants to do after ad dismissed or closed
                            }

                            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
                                super.onAdFailedToShowFullScreenContent(adError)
                                mInterstitialAd = null

                                /// perform your action here when ad will not load
                            }

                            override fun onAdShowedFullScreenContent() {
                                super.onAdShowedFullScreenContent()
                                this@Web.mInterstitialAd = null
                            }
                        }
                }

                override fun onAdFailedToLoad(loadAdError: LoadAdError) {
                    // Handle the error
                    mInterstitialAd = null
                }
            })
    }

    private fun toNextLevel() {
        // Show the interstitial if it is ready. Otherwise, proceed to the next level
        // without ever showing it
        if (mInterstitialAd != null) {
            mInterstitialAd?.show(this@Web)
        } else {
            nextLevel()

            // in case you want to load a new ad
            requestNewInterstitial()
        }
    }

    private fun nextLevel() {
        TODO("Not yet implemented")
    }

    private fun requestNewInterstitial() {
        if (mInterstitialAd == null) {
            loadAd()
        }
    }
}


以上是AndroidAdmobInterstitialAd已弃用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>