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

How Do We Call loadAd Method of NativeBannerAd More Than Once?

我只是想管理我的应用中广告的失败场景。因此,在 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

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

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

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

Documentation reference as POC

Ad Instance is not an ad manager. You are supposed to instantiate a new instance whenever you need "reload" an ad for native ads and banner ads.