我们如何多次调用 NativeBannerAd 的 loadAd 方法?
Posted
技术标签:
【中文标题】我们如何多次调用 NativeBannerAd 的 loadAd 方法?【英文标题】:How Do We Call loadAd Method of NativeBannerAd More Than Once? 【发布时间】:2020-01-26 01:43:44 【问题描述】:我只是想在我的应用中管理广告的失败场景。所以,在onError
由于某种原因(例如没有网络)触发后,我只调用了NativeBannerAd
的loadAd
方法,如下所示。但应用程序因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()
我没有在文档中看到有关此异常的任何描述。 NativeAd
、NativeAdsManager
、InterstitialAd
对象适用于上述场景。但 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
可以通过网络案例在所有NativeAd
、NativeAdsManager
、InterstitialAd
对象的onError
回调中发生,当它没有正确管理时,不仅是NativeBannerAd
。我错了吗?
@blackkara 考虑到最佳实践,您需要首先检查网络是否可用,或者您可以实施反应式或基于事件的解决方案来展示广告。如果只是再次尝试,则从错误中创建一个新广告(在发生 onError 的情况下,另一个添加不会尝试实例化新广告)。以上是关于我们如何多次调用 NativeBannerAd 的 loadAd 方法?的主要内容,如果未能解决你的问题,请参考以下文章
LayUI上传图片(文件)的时候,上传多张图片(文件)会调用多次接口,而我们想要让上传多个文件的时候只调用一次接口,怎么解决?