我们如何多次调用 NativeBannerAd 的 loadAd 方法?

Posted

技术标签:

【中文标题】我们如何多次调用 NativeBannerAd 的 loadAd 方法?【英文标题】:How Do We Call loadAd Method of NativeBannerAd More Than Once? 【发布时间】:2020-01-26 01:43:44 【问题描述】:

我只是想在我的应用中管理广告的失败场景。所以,在onError 由于某种原因(例如没有网络)触发后,我只调用了NativeBannerAdloadAd 方法,如下所示。但应用程序因called more than once 错误而崩溃。

 mFacebookNativeBannerAd = NativeBannerAd(context, id)
 val builder = mFacebookNativeBannerAd.buildLoadAdConfig()
 builder.withAdListener(object : NativeAdListener 
     // ...
     // Other callback methods
     override fun onError(p0: Ad?, error: AdError?) 
         mFacebookNativeBannerAd.loadAd() // --> 'called more than once' exception
     
 )
 mFacebookNativeBannerAd.loadAd()

我没有在文档中看到有关此异常的任何描述。 NativeAdNativeAdsManagerInterstitialAd 对象适用于上述场景。但 NativeBannerAd 没有。

如何重新加载广告?

我使用的观众版本是audience-network-sdk:5.6.1

【问题讨论】:

【参考方案1】:

一旦 Facebook NativeBannerAd 失败,则需要为每次重新加载创建一个新的横幅对象,因为不能再次使用相同的对象,因此您可以创建一个方法来实例化一个新的 NativeBannerAd 对象并加载它。

你一定在想Why not reuse the same object from onError

因为这是一种代码味道。如果出现网络错误(您的用例),插件将继续尝试自行加载(可以添加重试逻辑,但仍然有代码异味),并最终由于递归行为导致您的应用程序崩溃,***Exception

Documentation reference as POC

Ad Instance 不是广告管理器。你应该 每当您需要“重新加载”原生广告时,实例化一个新实例 广告和横幅广告。

【讨论】:

不幸的是,对我来说没有什么新鲜事。 ***Exception 可以通过网络案例在所有NativeAdNativeAdsManagerInterstitialAd 对象的onError 回调中发生,当它没有正确管理时,不仅是NativeBannerAd。我错了吗? @blackkara 考虑到最佳实践,您需要首先检查网络是否可用,或者您可以实施反应式或基于事件的解决方案来展示广告。如果只是再次尝试,则从错误中创建一个新广告(在发生 onError 的情况下,另一个添加不会尝试实例化新广告)。

以上是关于我们如何多次调用 NativeBannerAd 的 loadAd 方法?的主要内容,如果未能解决你的问题,请参考以下文章

LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?

防止多次 Ajax 更新

如何多次调用 viewDidLoad

多次 onReceive 使用会导致重复的 API 调用

如何防止多次播放动画 - Jquery

如何独立多次加载共享对象