原生样式

原生样式设置 让 Google Ad Manager 根据原生广告 您在商品中指定的样式。首先,指定尺寸和定位条件。 然后,添加 HTML、CSS 和 JavaScript 以定义自适应广告 从而在所有屏幕上获得高品质的显示效果您无需执行 呈现的任何内容;Ad Manager 会自动应用合适的原生样式 。原生样式的植入方式与横幅广告一样 使用 GAMBannerView。此类广告可与固定广告搭配使用 尺寸,也可以是在运行时确定的自适应广告尺寸。

前提条件

  • Google 移动广告 SDK 7.14.0 或更高版本

本指南假定您已经掌握了一些 Google 移动广告 SDK 的应用知识。 如果您还没有观看我们的 入门指南。

固定尺寸

借助采用固定尺寸的原生样式,您可以控制 。要设置固定尺寸,请按以下步骤操作:

  1. 在 Ad Manager 界面中创建一个订单项,然后选择 Size字段下拉菜单中预定义的尺寸。

  2. 在 Interface Builder 中,设置 GAMBannerView 的宽度和高度 与您在第 1 步中选择的预定义尺寸相匹配。您可以看到 横幅广告尺寸及其对应的 GADAdSize 常量的列表 尺码 部分。

植入固定尺寸的原生样式的步骤如下 请按照您的第一个横幅 请求, 但您可以更灵活地控制 HTML、CSS 和 JavaScript ,让您的横幅广告具有应用自然自然的外观和风格。

自适应尺寸

在某些情况下,固定尺寸可能没有意义。例如,您可以 希望广告的宽度与应用内容保持一致,但需要设置高度 来动态调整广告的内容。为处理这种情况 则可在 Ad Manager 界面中指定Fluid作为广告尺寸 表示广告的尺寸在应用中运行时确定。 SDK 提供了一个特殊的GADAdSize常量, kGADAdSizeFluid、 处理这种情况。自适应广告尺寸的高度是动态确定的 指定宽度,从而允许 GAMBannerView、 调整其高度,使其与广告素材的高度一致。

自适应请求

与其他广告格式不同,kGADAdSizeFluid 广告尺寸没有 预定义的宽度,因此请务必明确设置横幅广告的框架, 或 Interface Builder 中设定宽度。如果未指定宽度 默认情况下,SDK 会根据整个广告的 设备的宽度

如果您发出包含 kGADAdSizeFluid 的多尺寸请求, 返回的广告始终位于自适应容器内 其行为类似于自适应广告。如果非自适应广告素材 那么 SDK 会将广告放在 这样您就不必修改宽度限制 每次返回新广告时触发。

制作单个尺寸和多尺寸自适应尺寸的实现 非常相似;唯一的区别在于 请求,您可以设置 validAdSizes 属性以指定广告 对广告请求有效的尺寸:

Swift

bannerView.validAdSizes = [NSValueFromGADAdSize(kGADAdSizeFluid),
                           NSValueFromGADAdSize(kGADAdSizeBanner)]

Objective-C

_bannerView.validAdSizes = @[ NSValueFromGADAdSize(kGADAdSizeFluid),
                              NSValueFromGADAdSize(kGADAdSizeBanner) ];

代码的完整实现如下所示:

Swift

var bannerView: GAMBannerView!

override func viewDidLoad() {
  super.viewDidLoad()
  // Create the GAMBannerView and set its width to a width that makes sense for your
  // app. In this example, the width is set to the width of the UIViewController's
  // root view.
  bannerView = GAMBannerView(adSize: kGADAdSizeFluid)
  var frameRect = bannerView.frame
  frameRect.size.width = view.bounds.width
  bannerView.frame = frameRect

  // Uncomment this code for a multisize fluid request.
  // bannerView.validAdSizes = [NSValueFromGADAdSize(kGADAdSizeFluid),
  //                            NSValueFromGADAdSize(kGADAdSizeBanner)]

  bannerView.adUnitID = "YOUR_AD_UNIT_ID"
  bannerView.rootViewController = self

  // Make the ad request.
  bannerView.load(GAMRequest())
}

Objective-C

GAMBannerView *_bannerView;

- (void)viewDidLoad {
  [super viewDidLoad];
  // Create the GAMBannerView and set its width to a width that makes sense for your
  // app. In this example, the width is set to the width of the UIViewController's
  // root view.
  _bannerView = [[GAMBannerView alloc] initWithAdSize:kGADAdSizeFluid];
  CGRect frameRect = _bannerView.frame;
  frameRect.size.width = CGRectGetWidth(self.view.bounds);
  _bannerView.frame = frameRect;

  // Uncomment this code for a multisize fluid request.
  // _bannerView.validAdSizes = @[ NSValueFromGADAdSize(kGADAdSizeFluid),
  //                               NSValueFromGADAdSize(kGADAdSizeBanner) ];

  _bannerView.adUnitID = @"YOUR_AD_UNIT_ID";
  _bannerView.rootViewController = self;

  // Make the ad request.
  [_bannerView loadRequest:[GAMRequest request]];
}

要查看 Ad Manager 自适应广告尺寸的实施示例, 下载 Swift 或 Objective-C 版 iOS API 演示应用。

下载 API 演示

GADAdSizeDelegate 协议

您可能需要在广告尺寸更改之前了解横幅广告的高度。 adView:willChangeAdSizeTo: 回调会在 横幅广告视图会更改为新的 GADAdSize。在以下日期之前收到通知 横幅广告视图更改为新的广告尺寸时,您的类必须符合 GADAdSizeDelegate 协议。

下面是 adView:willChangeAdSizeTo: 的实现示例。 回调,其中展示了如何获取横幅广告的新宽度和高度:

Swift

// To be notified before the banner's ad size changes, your view controller class must
// conform to the GADAdSizeDelegate protocol.
bannerView.adSizeDelegate = self

// MARK: - GADAdSizeDelegate

func adView(_ bannerView: GADBannerView, willChangeAdSizeTo adSize: GADAdSize) {
  let height = adSize.size.height
  let width = adSize.size.width
}

Objective-C

// To be notified before the banner's ad size changes, your view controller class must
// conform to the GADAdSizeDelegate protocol.
_bannerView.adSizeDelegate = self;

#pragma mark - GADAdSizeDelegate

- (void)adView:(GADBannerView *)bannerView willChangeAdSizeTo:(GADAdSize)adSize {
  CGFloat height = adSize.size.height;
  CGFloat width = adSize.size.width;
}