如何使用普通 Adlistener 调用所有覆盖仅在 Facebook 原生广告上调用 onAdloaded

Posted

技术标签:

【中文标题】如何使用普通 Adlistener 调用所有覆盖仅在 Facebook 原生广告上调用 onAdloaded【英文标题】:How to call only onAdloaded on Facebook Native Ads using normal Adlistener call all override 【发布时间】:2020-12-03 12:49:16 【问题描述】:

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

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) 
                

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

【问题讨论】:

【参考方案1】:

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

Facebook-Audience-Network:你不能像onAdLoaded那样调用AdListener的单一方法,如果你调用单一方法然后代码 不行,你必须调用所有方法然后它才能工作。

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

长代码:

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) 

谢谢

快乐编码:)

【讨论】:

以上是关于如何使用普通 Adlistener 调用所有覆盖仅在 Facebook 原生广告上调用 onAdloaded的主要内容,如果未能解决你的问题,请参考以下文章

如何使用网络策略停止所有外部流量并仅允许命名空间内的 Pod 间网络调用?

为仅标头库获取有用的 GCov 结果

如何使用fabric js仅通过覆盖矩形打孔?

如何按名称覆盖 Spring 服务 bean,仅使用注释

如何检测 Angular CLI 以报告所有源文件的覆盖率

Python入门精华-OOP调用父类的方法及MRO方法解析序列