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

bla*_*ara 9 android facebook-ads-api facebook-audience-network

我只是想在我的应用程序中管理广告的失败情况。因此,onError由于某种原因(例如没有网络)触发后,我只是调用loadAdNativeBannerAd如下所示的方法。但应用程序因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()
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能再次加载广告?

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

Pav*_*ngh 5

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

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

因为这是一种代码气味。如果出现网络错误(您的用例),add 将继续尝试自行加载(可以添加重试逻辑但仍然存在代码异味),最终会StackOverflowException因递归行为而导致您的应用程序崩溃。

作为 POC 的文档参考

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