原生样式

通过原生样式设置,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 Demo 应用。

下载 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;
}