Как мы вызываем метод loadAd из NativeBannerAd более одного раза? - PullRequest
7 голосов
/ 26 января 2020

Я просто пытаюсь управлять сценарием сбоя ios объявлений в моем приложении. Итак, после onError срабатывания по какой-то причине (например, без сети) я просто вызвал loadAd метод NativeBannerAd, как показано ниже. Но приложение упало с ошибкой 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 Ответ

3 голосов
/ 29 января 2020

После сбоя Facebook NativeBannerAd необходимо создавать новый объект баннера для каждой перезагрузки, поскольку один и тот же объект нельзя использовать снова, поэтому вы можете создать метод, который будет создавать новый объект NativeBannerAd и загружать его.

Вы должны думать Why not reuse the same object from onError?

Потому что это запах кода. В случае сетевой ошибки (ваш вариант использования), добавление будет продолжать пытаться загрузить его самостоятельно (может добавить логи повторных попыток c, но все еще пахнет кодом) и в конечном итоге взломает sh ваше приложение с StackOverflowException из-за рекурсии поведение.

Ссылка на документацию в виде заказа на поставку C

Рекламный экземпляр не является менеджером объявлений. Предполагается, что вы создаете новый экземпляр всякий раз, когда вам нужно «перезагрузить» рекламу для нативной и баннерной рекламы.

...