【问题标题】:How to avoid re-loading of Admob ads upon configuration change and starting an Activity?如何避免在配置更改和启动 Activity 时重新加载 Admob 广告?
【发布时间】:2017-01-19 00:21:09
【问题描述】:

使用横幅示例here,我注意到如果我改变方向,广告就会消失,然后重新加载(需要时间),所以每次我改变方向时都会有一段时间没有显示任何内容。

我知道可以通过清单为活动设置 configChanges(它确实有效),但通常不建议这样做。它有多个缺陷:

  1. 在我的例子中,例如,改变方向让工具栏保持在相同的高度,这是错误的,因为它在横向和纵向上应该是不同的。
  2. 转到另一个 Activity,Admob 视图仍会重新加载,即使之前已加载。
  3. 从纵向到横向(反之亦然)时,广告无法很好地适应新的方向。

在每次配置更改时,还可以做些什么来避免重新加载广告?

我希望 Admob 加载一次广告(其余的在后台加载,用于新广告),然后显示它们,并避免在我改变方向时重新加载。每次我达到它时,只显示最适合当前配置(例如方向)的配置。

同样适用于具有 Admob 广告的新 Activity。如果之前加载过,则无需重新加载。


编辑:我对此给予了赏金,因为 Google/Firebase 支持人员通过电子邮件告诉我,实际上可以缓存广告:

Ads SDK 不会为您缓存广告,但您可以实施 'AdManager' 样式类,很可能是单例或实例 附加到您的应用程序实例,它可以管理缓存 你。

如您所知,这是一种破坏和重建的 Android 模式 定向活动,通常保存实例状态并 通过捆绑包恢复,但这不适用于视图。

如果您希望在此优化横幅视图的重新加载时间 在这种情况下,我建议您通过 AdManager 提出广告请求 类,然后 AdManager 可以应用一些逻辑来缓存广告,例如 作为您的横幅视图一段时间,并返回 以前的横幅,如果它仍然对新请求有效(您 会改变方向)。

还有:

SDK 没有实现缓存广告的这种想法,因为它是 难以确定适用于所有情况的最佳缓存逻辑, 因此留给开发人员来实现适合他们的缓存 用例,如果需要的话。

可能将横幅广告与“AdView”类分离 制作更合适的可缓存对象,但这不是 目前是这样。

因此,是的,我们建议为了预取/缓存一个 横幅广告,您需要存储“AdView”。而不是使用 然而,AdManager 是另一种受支持且确实推荐的方法 将使用 ViewModel,请参阅 https://developer.android.com/guide/topics/resources/runtime-changes#RetainingAnObjecthttps://developer.android.com/topic/libraries/architecture/viewmodel。 这些正是为这种用例而设计的。

如果确实有可能,我想确切地知道该怎么做。请成功的人在代码中显示可以做什么。

【问题讨论】:

  • @Thracian 附加和分离然后呢?这其中的解决方案在哪里?
  • 检查this
  • @Maddy 正如我所写,我已经使用了android:configChanges,但这会导致新的问题,我已经解释过了。

标签: android admob orientation


【解决方案1】:

我不清楚如何缓存普通广告。单例和视图模型都无济于事,我们无法缓存/保留视图本身,也没有要保留的公共广告对象。

但是有 AdLoader 使用它可以加载原生广告,并保留加载的 UnifiedNativeAd 对象。然后它可以用来在视图中设置广告。

其他广告 SDK 提供了预取广告的方法。

附:不知道为什么堆栈在“android viewmodel”查询的搜索结果中带来了这个

【讨论】:

  • 您知道哪些广告网络 SDK 具有适当的缓存功能?
  • @androiddeveloper,现在我记得只有 Appodeal 可以预加载横幅,但它是一个包含许多其他广告网络的中介。
  • 有趣。您还记得您使用过哪些广告网络吗?还是它会自动完成这一切?
  • @androiddeveloper,不能确定哪个 sdk 真正支持缓存,哪些不是,但在我使用过 Appodeal.setAutoCache(Appodeal.BANNER, true);Appodeal.cache(context, type, count) 的项目中包含以下 sdk:applovin,@ 987654326@, my-target, unity-ads, cheetah-mobile.
  • @androiddeveloper 据我所知,一切都是通过 Appodeal 管理的,主要由客户管理。
【解决方案2】:

似乎拥有原生广告是最好的选择,而不是 configChanges 。例如,可以将纯数据保存在 Fragment/Activity 的 ViewModel 中,以便再次使用。

遗憾的是,这是一个您必须自己实施的解决方案,不仅包括外观,还包括加载过程本身,包括何时自己重新加载。

根据一个人的需要,有很多东西要阅读和实施,所以最好的开始是:

https://developers.google.com/admob/android/native/start

不确定是否在收入方面与横幅广告大致相同。

【讨论】:

    【解决方案3】:

    我认为使用智能横幅是一个不错的选择,因为它们适用于任何方向 要使用智能横幅,请为广告尺寸指定常量 SMART_BANNER

    AdView adView = new AdView(this);
    
    adView.setAdSize(AdSize.SMART_BANNER);
    

    也检查一下: https://firebase.google.com/docs/admob/android/banner#smart_banners

    【讨论】:

    • 我没有问这个。我问如何避免重新加载。它被隐藏,然后重新显示。
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多