首页 > 解决方案 > 如何使用普通 Adlistener 调用所有覆盖仅在 Facebook 原生广告上调用 onAdloaded

问题描述

请帮助我想出一种方法来缩短原生广告代码,因为如果我使用多个广告,它会变得非常混乱

try {
                    fbNativeAd = NativeAd(this@SplashActivity, fbNative)
                } catch (e: Exception) {
                }

                val nativeAdListener: NativeAdListener = object : NativeAdListener {
                    override fun onMediaDownloaded(ad: Ad) {
                        // Native ad finished downloading all assets
                        Log.e(TAG, "Native ad finished downloading all assets.")
                    }

                    override fun onError(ad: Ad, adError: AdError) {
                        // Native ad failed to load
                        Log.e(TAG, "Native ad failed to load: " + adError.errorMessage)
                    }

                    override fun onAdLoaded(ad: Ad) {
                        // Native ad is loaded and ready to be displayed
                        Log.d(TAG, "Native ad is loaded and ready to be displayed!")
                        inflateFbNativeAd(fbNativeAd!!)
                    }

                    override fun onAdClicked(ad: Ad) {
                        // Native ad clicked
                        Log.d(TAG, "Native ad clicked!")
                    }

                    override fun onLoggingImpression(ad: Ad) {
                        // Native ad impression
                        Log.d(TAG, "Native ad impression logged!")
                    }
                }

                // Request an ad
                try {
                    fbNativeAd!!.loadAd(
                        fbNativeAd!!.buildLoadAdConfig()
                            .withAdListener(nativeAdListener)
                            .withMediaCacheFlag(NativeAdBase.MediaCacheFlag.ALL)
                            .build())
                } catch (e: Exception) {
                }

这是我现在正在使用的代码,我该如何缩短它?我应该尝试使用抽象侦听器吗?因为当我尝试使用它时,它不起作用。谁能告诉我我做错了什么?

标签: androidfacebook-audience-network

解决方案


我能理解你的问题。我也有同样的问题。Facebook sdk 不像 Admob 那样智能/灵活。

Facebook-Audience-Network:如果您调用单个方法,则不能调用AdListener类似的单个方法,onAdLoaded然后代码将不起作用,您必须调用所有方法才能起作用。

您可以通过这种方式缩小/缩短代码:

长代码:

override fun onMediaDownloaded(ad: Ad) {
                        // Native ad finished downloading all assets
                        Log.e(TAG, "Native ad finished downloading all assets.")
                    }

缩短这个无用的代码(以这种方式):

override fun onMediaDownloaded(ad: Ad) {}

谢谢

快乐编码:)


推荐阅读