原生广告

原生广告是通过平台原生的界面组件向用户呈现的广告素材资源。它们使用您已在故事板中使用的相同类进行展示,并且能采用与应用的视觉设计相称的格式。

加载原生广告时,您的应用会收到一个包含其素材资源的广告对象,然后由应用(而不是 Google 移动广告 SDK)负责展示它们。

一般来说,要成功植入原生广告,就需要完成两部分工作:使用 SDK 加载广告,然后在您的应用中展示广告内容。

本页介绍了如何使用 SDK 加载 原生广告

前提条件

务必用测试广告进行测试

构建和测试应用时,请确保使用测试广告,而不是实际投放的广告。

对于 iOS 上的原生广告,加载测试广告最简便的方法就是使用下面的专用测试广告单元 ID:

/6499/example/native

该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告,您可以在自己应用的编码、测试和调试过程中使用它。只是一定要在发布应用前用您自己的广告单元 ID 替换该测试广告单元 ID。

如需详细了解 Google 移动广告 SDK 的测试广告如何运作,请参阅测试广告

加载广告

原生广告使用 GADAdLoader 类加载,该类根据 GADAdLoaderDelegate 协议向它们的代理发送消息。

除了系统定义的原生广告格式之外,您还可以创建自己的自定义原生广告格式,以用于直销原生广告。通过自定义原生广告格式,您可以将任意结构化数据传递到您的应用。这些广告由 GADCustomNativeAd 类表示。

初始化广告加载器

您必须先初始化广告加载程序,然后才能加载广告。以下代码演示了如何初始化 GADAdLoader

Swift

adLoader = GADAdLoader(adUnitID: "/6499/example/native",
    rootViewController: self,
    adTypes: [ .native ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/6499/example/native"
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

您需要一个广告单元 ID(可以使用测试 ID)、要在 adTypes 数组中传递的常量(以指定要请求的原生广告格式)以及要在 options 参数中设置的任何选项。有关 options 参数的可取值列表,请参阅“设置原生广告选项”页面

adTypes 数组应包含 以下一个或多个常量:

实现广告加载器代理

广告加载程序代理需要实现您的广告类型专用的协议。对于 原生广告,GADNativeAdLoaderDelegate 协议包括一条在原生广告加载后发送给代理的消息。

Swift

public func adLoader(_ adLoader: GADAdLoader,
            didReceive nativeAd: GADNativeAd)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd;

GADCustomNativeAdLoaderDelegate 协议包含在自定义模板广告加载后发送给代理的消息。

Swift

func adLoader(_ adLoader: GADAdLoader,
  Receive customNativeAd: GADCustomNativeAd)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveCustomNativeAd:(GADCustomNativeAd *) customNativeAd;

提出广告请求

初始化 GADAdLoader 后,请调用其 loadRequest: 方法来请求广告:

Swift

adLoader.load(GAMRequest())

Objective-C

[self.adLoader loadRequest:[GAMRequest request]];

GADAdLoader 中的 loadRequest: 方法接受与横幅广告和插页式广告相同的 GAMRequest 对象。与处理其他广告类型一样,您可以使用请求对象添加定位信息

确定加载完成时间

在应用调用 loadRequest: 后,可通过调用以下方法获取请求的结果:

而对于单个广告请求,会导致对其中一种方法的一次调用。

处理失败的请求

上述协议扩展了 GADAdLoaderDelegate 协议,用于定义广告加载失败时发送的消息。

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: NSError)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(NSError *)error;

接收有关原生广告事件的通知

若要在发生与原生广告互动相关的事件时收到通知,请设置原生广告的委托属性:

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

然后,实现 GADNativeAdDelegate 以接收以下委托调用:

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADNativeAd) {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

Objective-C

- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

最佳实践

加载广告时请遵循这些规则。

  • 对于使用列表中的原生广告的应用,应预缓存广告列表。

  • 预缓存广告时,清除缓存并在一小时后重新加载。

  • 在上一个请求完成加载(如 adLoaderDidFinishLoading: 所示)之前,不要对 GADAdLoader 再次调用 loadRequest:

展示您的广告

加载广告后,剩下的工作就是将其展示给您的用户。请参阅我们的原生高级广告指南,了解具体方法。