原生广告

原生广告是通过平台原本就有的界面组件向用户呈现的广告素材资源。它们使用您已在 Storyboard 中使用的相同类进行展示,而且能以和应用视觉设计相称的形式呈现。加载原生广告时,您的应用会收到一个包含其素材资源的广告对象,然后由应用(而不是 SDK)负责展示它们。这与其他广告格式不同,原生广告不允许您自定义广告的外观。

本指南介绍了如何使用 Google 移动广告 SDK 在 iOS 应用中植入原生广告,以及在这一过程中需要注意的一些重要事项。

一般而言,要成功植入原生广告,就需要完成以下两部分操作:通过 SDK 加载广告,然后在您的应用中展示广告内容。本页讨论了如何使用 SDK 加载广告。

前提条件

本指南假定您已经掌握了一些 Google 移动广告 SDK 的应用知识,如果没有的话,不妨先通读我们的入门指南

务必用测试广告进行测试

开始之前,首先要注意的是,在开发和测试应用时,应确保使用测试广告而不是实际投放的广告。使用实际投放的广告进行测试可能会导致您的帐号被暂停。

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

ca-app-pub-3940256099942544/3986624511

该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告,您可以在自己应用的编码、测试和调试过程中随意使用该测试广告单元 ID。只需确保您会在发布应用前用自己的广告单元 ID 替换该测试广告单元 ID 即可。

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

加载广告

有两种系统定义的原生广告格式:应用安装广告和内容广告。

这两种广告均由一个类表示:GADUnifiedNativeAd。此类的实例包含原生广告的素材资源。请注意,某些字段中不会填充任何值(即均为 nil),具体取决于 GADUnifiedNativeAd 所表示的广告类型。

原生广告通过 GADAdLoader 对象加载,这些对象根据 GADAdLoaderDelegate 协议向它们的代理发送消息。

初始化广告加载程序

在加载广告之前,您必须初始化广告加载程序。以下代码演示了如何初始化 GADAdLoader

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeUnifiedNative ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

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

adTypes 数组应包含此内容:

实现广告加载程序代理

广告加载程序代理需要实现特别针对您的广告类型的协议。对于unified原生广告:

  • GADUnifiedNativeAdLoaderDelegate 此协议包括一条在统一原生广告加载后发送给代理的消息:

    Swift

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

    Objective-C

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

请求广告

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

Swift

adLoader.load(GADRequest())

Objective-C

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

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

何时请求广告

展示原生广告的应用可以在实际展示广告之前随时请求这些广告。在许多情况下,这是推荐的做法。例如,如果某款应用展示一个商品清单,其中会夹杂一些原生广告,那么该应用就可以加载整个清单中的原生广告,因为它知道一些广告仅在用户滚动浏览视图后才会展示,还有一些可能根本不会展示。

尽管预先提取广告是一种很好的方法,但务必不要长久保留旧广告而不进行展示。对任何原生广告对象来说,如果在保留一小时后仍没有获得展示,就应该予以舍弃,并替换为来自新请求的新广告。

确定加载完成时间

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

如果一个请求中只涉及单个广告,则系统只会调用上述中的一个方法,且仅调用一次。

如果一个请求中涉及多个广告,则系统会对上述方法进行至少一次回调,但回调次数不会超过请求的广告数量上限。

此外,GADAdLoaderDelegate 还会提供 adLoaderDidFinishLoading 回调。此代理方法指示广告加载程序已完成广告加载,且不会报告该请求的其他广告或错误。以下示例展示了如何在一次性加载多个原生广告时使用该方法。

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdsOptions.numberOfAds = 5

    adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self,
        adTypes: [GADAdLoaderAdType.unifiedNative],
        options: [multipleAdsOptions])
    adLoader.delegate = self
    adLoader.load(GADRequest())
  }

  func adLoader(_ adLoader: GADAdLoader,
                didReceive nativeAd: GADUnifiedNativeAd) {
    // A unified native ad has loaded, and can be displayed.
  }

  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
      // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Objective-C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;

  self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
          rootViewController:self
                     adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified native ad has loaded, and can be displayed.
}

- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

处理失败的请求

上述协议扩展了 GADAdLoaderDelegate 协议,指定了无法加载广告时应发送的消息。您可以使用 GADRequestError 对象来确定错误的原因。

Swift

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

Objective-C

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

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

要接收与原生广告互动相关的事件的通知,请设置原生广告的代理属性:

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

然后,实现 GADUnifiedNativeAdDelegate 以接收以下代理调用:

Swift

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

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

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

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

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

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

Objective-C

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

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

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

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

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

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

展示您的广告

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

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面