原生广告是通过平台原本就有的界面组件向用户呈现的广告素材资源。这种广告采用您已经在 Storyboard 中使用的那些类进行展示,能以和应用视觉设计相称的形式呈现,让用户有浑然一体的使用体验。
加载原生广告时,您的应用会收到一个包含其素材资源的广告对象,然后由应用(而不是 Google 移动广告 SDK)负责展示它们。
一般来说,要成功植入原生广告,就需要完成两步:使用 SDK 加载广告,然后在您的应用中展示广告内容。
本页介绍了如何使用 SDK 加载原生广告。
前提条件
- 完成入门指南。
始终使用测试广告进行测试
在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。
对于 iOS 上投放的原生广告,加载测试广告最简便的方法就是使用下面的测试专用广告单元 ID:
/21775744923/example/native
该测试广告单元 ID 已经过专门配置,可确保每个请求返回的都是测试广告。您可以在自己应用的编码、测试和调试过程中使用该测试广告单元 ID。只需确保在发布应用前用您自己的广告单元 ID 替换该测试广告单元 ID 即可。
如需详细了解 Google 移动广告 SDK 的测试广告如何运作,请参阅测试广告。
加载广告
原生广告使用 GADAdLoader
类加载,这些对象根据 GADAdLoaderDelegate
协议向它们的代理发送消息。
除了系统定义的原生广告格式之外,您还可以创建自己的自定义原生广告格式,这些格式可用于直销原生广告。借助自定义原生广告格式,您可以将任意结构化数据传递到您的应用。这些广告由 GADCustomNativeAd
类表示。
初始化广告加载程序
您必须先初始化广告加载程序,然后才能加载广告。以下代码演示了如何初始化 GADAdLoader
:
Swift
adLoader = GADAdLoader(adUnitID: "/21775744923/example/native",
// The UIViewController parameter is optional.
rootViewController: rootViewController,
adTypes: [ .native ],
options: [ ... ad loader options objects ... ])
adLoader.delegate = self
Objective-C
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"/21775744923/example/native"
// The UIViewController parameter is nullable.
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
中的adLoader:didFailToReceiveAdWithError:
GADNativeAdLoaderDelegate
中的adLoader:didReceiveNativeAd:
如果一个请求中只涉及单个广告,则系统会对上述方法之一进行一次调用。
处理失败的请求
上述协议扩展了 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:
。仅缓存所需的原生广告。例如,在预缓存时,仅缓存直接在屏幕上可见的广告。原生广告占用大量内存,如果缓存原生广告而不销毁它们,就会导致内存用量过多。
在不再使用时销毁原生广告。
展示您的广告
加载广告后,剩下的工作就是将其展示给您的用户。请参阅我们的原生高级广告指南,了解具体方法。