如何获取智能横幅的横幅尺寸?

Posted

技术标签:

【中文标题】如何获取智能横幅的横幅尺寸?【英文标题】:How to get banner size of smart banner? 【发布时间】:2018-11-28 20:39:50 【问题描述】:

我正在尝试通过 firebase_admob 将 admob 集成到我的颤振应用程序中。

默认情况下,它似乎只是在当前视图的顶部覆盖/堆叠横幅......而不考虑实际的小部件树及其约束。

我真的不知道为什么有人会设计这样的库.. 但没关系。也许是出于反欺诈的原因?!

为了避免用横幅覆盖实际内容,我想在我的内容中添加一个填充(填充高度 = 横幅高度)。

由于我使用的是“智能横幅”,因此该库会在运行时动态尝试为给定屏幕尺寸找到最佳横幅尺寸。

如何找出它想出的横幅尺寸??

【问题讨论】:

您找到解决方案了吗? @hui00 不,我没有:( 这里有更新吗? 你能发布你的代码吗? 【参考方案1】:

你可以使用我的方法getMargin,它会计算出你需要显示横幅的内边距值,而不会与你的内容重叠,无论手机的高度是多少,它都会自动设置正确的内边距价值。

SmartBanner 具有三个高度:32|50|90 我的方法计算手机的高度并设置正确的值+ 5。

   double getMargin(double height)

        double margin;

        if(height <= 400)

          margin = 37;

         else if(height >= 400 && height < 720)

          margin = 55;

         else if(height >= 720)

          margin = 95;

        

        return margin;

      

示例:

 double screenHeight = MediaQuery.of(context).size.height;

Container(
  height: EdgeInsets.fromLTRB(bottom: getMargin(height))
)

另外,您可以像我一样将它添加到一个单独的类中,并使方法静态以从那里调用。

class Ads 

    static double getMargin(double height)

        double margin;

        if(height <= 400)

          margin = 37;

         else if(height >= 400 && height < 720)

      margin = 55;

     else if(height >= 720)

      margin = 95;

    

    return margin;

  

示例:

 double screenHeight = MediaQuery.of(context).size.height;

Container(
  height: EdgeInsets.fromLTRB(bottom: Ads.getMargin(height))
)

【讨论】:

很遗憾,这是目前唯一的解决方案,谢谢【参考方案2】:

从@mattia-galati 的答案中发布的specs 来看,也有固定高度选项可用。你为什么不使用其中之一?

AdSize.bannerAdSize.largeBanner 等具有固定高度。

仅使用 AdSize.smartBanner 的任何具体原因?

【讨论】:

这些选项具有固定的高度和宽度(320 或 468)。这意味着横幅并不总是覆盖整个屏幕宽度。智能横幅适应。 好的。如果这是问题所在,我看到许多应用程序所做的,也是我所做的,就是将添加保持在容器的中心。所以它看起来像一个缺口。或者,如果适合外观,则保持该容器的背景不同。【参考方案3】:

根据Google Specs,这是我用来获取智能横幅高度的代码。

  /// The initial size of the banner is calculated on the height of the
  /// viewport. Due to ADMob banner refresh policies, in order to have
  /// a consistent behaviour, we should keep track of the current AD size
  /// and maintain it when the user rotates the screen, and update that
  /// value at every banner successful.
  /// For now, we will avoid this complexity and set the banner height to
  /// the maximum height that a banner could get on this device, forcing
  /// the use of the longest side as the base.
  /// see https://developers.google.com/admob/android/banner#smart_banners
  double _getSmartBannerHeight(BuildContext context) 
    MediaQueryData mediaScreen = MediaQuery.of(context);
    double dpHeight = mediaScreen.orientation == Orientation.portrait
        ? mediaScreen.size.height
        : mediaScreen.size.width;
    log.fine("Device height: $dpHeight");
    if (dpHeight <= 400.0) 
      return 32.0;
    
    if (dpHeight > 720.0) 
      return 90.0;
    
    return 50.0;
  

如您所见,我始终使用设备的最长边,而不是计算与实际设备高度相关的横幅高度(换句话说,根据设备方向)。

这样做是因为当用户旋转设备时,官方的 flutter_admob 插件不会重新加载适当的横幅。考虑这种情况: - 纵向设备,横幅加载 50 - 用户旋转设备:根据文档,高度应为 32,但横幅不会重新加载,高度为 50 - 根据您的广告系列设置,会发生新的横幅加载,提供高度为 32 的横幅 - 用户再次旋转设备等等

正如我在评论中所说,一个有效的解决方案是追踪最后一个横幅大小,并对横幅加载事件做出反应,以便为用户提供无缝体验。

【讨论】:

这段代码应该可以在 ios 上运行,但是现在我不记得有没有测试过,抱歉。 很遗憾不起作用,实际横幅广告的高度远小于应有的高度...... 适用于任何需要智能横幅尺寸文档的人。 developers.google.com/admob/android/banner/smart 另外,我认为当方向为横向(而不是屏幕宽度)时,您仍然应该使用屏幕高度作为 dpHeight,因为屏幕高度会在更改方向时自动调整。

以上是关于如何获取智能横幅的横幅尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

Android广告尺寸(智能横幅并不总是有效)

如果获取Android中的最后一个横幅,如何再次回到横幅

如何使用 Youtube API 获取 Youtube 频道横幅?

为什么浏览智能横幅不会在横向模式下显示?

如何在我们的网站中使用 ios 的智能应用横幅

iOS 9 智能应用横幅不再回来