原生广告是通过平台原生的界面组件向用户呈现的广告素材资源。它们使用您已经在分镜脚本中使用的类显示,并且可以采用与应用的视觉设计相匹配的格式。
加载原生广告时,您的应用会收到一个包含其素材资源的广告对象,然后由应用(而不是 Google 移动广告 SDK)负责展示广告。
一般而言,成功植入原生广告涉及到以下两个部分:使用 SDK 加载广告,然后在您的应用中展示广告内容。
本页介绍了如何使用 SDK 加载 原生广告。
前提条件
- 通读入门指南。
务必用测试广告进行测试
在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。
对于 iOS 上的原生广告,加载测试广告最简便的方法就是使用下面的测试专用广告单元 ID:
ca-app-pub-3940256099942544/3986624511
该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告,您可以在自己应用的编码、测试和调试过程中使用该测试广告单元 ID。需要注意的一点是,请务必在发布应用前用您的广告单元 ID 替换该测试广告单元 ID。
如需详细了解 Google 移动广告 SDK 的测试广告如何运作,请参阅测试广告。
正在加载广告
原生广告是通过 GADAdLoader
类加载的,该类会根据 GADAdLoaderDelegate
协议向代理委托。
初始化广告加载器
您必须先初始化广告加载器,然后才能加载广告。以下代码演示了如何初始化 GADAdLoader
:
Swift
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
rootViewController: self,
adTypes: [ .native ],
options: [ ... ad loader options objects ... ])
adLoader.delegate = self
Objective-C
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
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;
提出广告请求
初始化 GADAdLoader
后,调用其 loadRequest:
方法来请求广告:
Swift
adLoader.load(GADRequest())
Objective-C
[self.adLoader loadRequest:[GADRequest request]];
GADAdLoader
中的 loadRequest:
方法接受与横幅广告和插页式广告相同的 GADRequest
对象。您可以使用请求对象来添加定位信息,就像处理其他广告类型一样。
加载多个广告(可选)
如需在单个请求中加载多个广告,请在初始化 GADAdLoader
时设置 GADMultipleAdsAdLoaderOptions
对象。
Swift
let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
rootViewController: self,
adTypes: [ .native ],
options: [ multipleAdOptions ])
Objective-C
GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
[[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
rootViewController:rootViewController
adTypes:@[ GADAdLoaderAdTypeNative ]
options:@[ multipleAdsOptions ]];
每个请求的广告数量上限为 5 个,但无法保证 SDK 返回的确切广告数量。
返回的 Google 广告会有所差异,但预订广告资源或第三方买方的广告不保证是唯一的。
如果您使用的是中介功能,请勿使用 GADMultipleAdsAdLoaderOptions
类,因为针对原生广告配置的广告单元 ID 目前不支持多个原生广告的请求。
确定加载完成时间
应用调用 loadRequest:
后,它可以通过调用以下命令来获取请求结果:
GADAdLoaderDelegate
中的adLoader:didFailToReceiveAdWithError:
GADNativeAdLoaderDelegate
中的adLoader:didReceiveNativeAd:
针对单个广告的请求会导致对这些方法之一进行一次调用。
一次请求多个广告将导致针对上述方法的至少一次回调,但不能超过请求广告数量上限。
此外,GADAdLoaderDelegate
还提供 adLoaderDidFinishLoading
回调。此委托方法用于指示广告加载程序已完成广告加载,并且不会为相应请求报告任何其他广告或错误。下面举例说明了如何在一次加载多个原生广告时使用该方法:
Swift
class ViewController: UIViewController, GADNativeAdLoaderDelegate {
var adLoader: GADAdLoader!
override func viewDidLoad() {
super.viewDidLoad()
let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
rootViewController: self,
adTypes: [ .native ],
options: [ multipleAdOptions ])
adLoader.delegate = self
adLoader.load(GADRequest())
}
func adLoader(_ adLoader: GADAdLoader,
didReceive nativeAd: GADNativeAd) {
// A 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 () <GADNativeAdLoaderDelegate, 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:@"ca-app-pub-3940256099942544/3986624511"
rootViewController:rootViewController
adTypes:@[ GADAdLoaderAdTypeNative ]
options:@[ multipleAdsOptions ]];
self.adLoader.delegate = self;
[self.adLoader loadRequest:[GADRequest request]];
}
- (void)adLoader:(GADAdLoader *)adLoader
didReceiveNativeAd:(GADNativeAd *)nativeAd {
// A 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
协议,后者规定了广告加载失败时发送的消息。
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.
}
最佳实践
加载广告时请遵循这些规则。
在列表中使用原生广告的应用应预先缓存广告列表。
预缓存广告时,请清除缓存并一小时后重新加载。
在第一个请求完成加载之前,请勿对
GADAdLoader
调用loadRequest:
。
展示广告
加载广告后,您只需向用户展示广告即可。请参阅我们的原生高级广告指南,了解具体方法。