适用于 iOS 的 AFS 原生实现

Google 移动广告 SDK 还支持自定义搜索广告样式。如果您的应用 已在使用 Google 移动广告 SDK,我们建议您使用 AFSMA SDK 版本 。

前提条件

  • 使用 Xcode 8.0 或更高版本
  • 定位到 iOS 8.0 或更高版本
  • 有效的发布商网络媒体资源代码(例如 vert-ppa-test1-srp)
  • CocoaPods

导入 AFS 原生 SDK

CocoaPods

使用以下命令将 Google-AFSNative SDK 导入 iOS 项目: CocoaPods。打开项目的 Podfile 中,并将下面这行代码添加到应用的目标中:

pod 'Google-AFSNative'

然后在命令行中运行以下命令:

pod install --repo-update

如果您刚开始接触 CocoaPods,请参阅 如需了解相关信息,请参阅官方文档 如何创建和使用 Podfile

概览

如果您要从 2.0.8 或更早版本升级到 4.0 或更新版本,请参阅 迁移指南

本文档简要介绍了集成 AFS 原生广告的流程 在您的 iOS 移动应用中 找到“广告素材”

GANSearchAdController

  • 您需要向 GANSearchAdController 构造函数提供 发布商的网络媒体资源代码、所需的设置 ID 以及关联的 GANSearchAdControllerOptions 对象。
  • 每次调用 loadAds() 都表示新的搜索,这会导致当前的 被舍弃并失效的广告集。
  • 广告素材存储在 GANAdView 中。
  • 广告通过 populateAdView 方法插入到广告 GANAdView 中。在 除了要填充的 GANAdView 之外,调用方还会提供一个 adIdentifier,这是一个可以唯一标识广告的任意字符串。 在 API 中,系统会为向每个传递的 adIdentifier 分配一个特定广告 位置以后每当再次传递该 adKey 时,就会触发同一个广告 返回。例如,如果首次调用 populateAdView adIdentifier "keyA",在传递时对 populateAdView 的后续每次调用 “keyA”因为 adIdentifier 将展示同一个广告。

GANAdView

  • 这是包含相应广告素材的 UIView。
  • 使用广告上的 populateAdView 方法填充此视图 GANSearchAdController

GANSearchAdControllerOptions

  • 将此对象传递给 GANSearchAdController 构造函数以指定 请求和展示广告的方式

GANSearchAdRequest

  • 使用以下代码对 GANSearchAdController 实例调用 loadAds 方法: 对象发出广告请求。

GANSearchAdControllerDelegate

  • 实现此接口并将其提供给 GANSearchAdController,以便 为多种状态注册回调。

实现示例

以下示例演示了如何创建 GANSearchAdControllerGANView,以在示例 ViewController 中展示广告。

// SampleAppViewController.m implementation

#import <AFSNative/AFSNative.h>

@interface GBannerViewController () {
  // The Ad Controller used by the sample application.
  GANSearchAdController *_adController;

  // The Ad View to display the loaded ad.
  GANAdView *_adView;
}
// scrollView will be where we place our ads in this example.
@property(nonatomic, strong) UIScrollView *scrollView;
@end
...

- (void)viewDidLoad {
  [super viewDidLoad];

  // Create the scroll view.
  ...
  [self.view addSubview:scrollView];

  // Create a test button and link the ad request to its action.
  UIButton *loadBannerButton = [UIButton buttonWithType:UIButtonTypeCustom];
  ...
  [loadBannerButton addTarget:self
                       action:@selector(loadAd:)
             forControlEvents:UIControlEventTouchUpInside];
  [self.scrollView addSubview:loadBannerButton];

  // Construct the Ad Controller.
  GANSearchAdControllerOptions *options = [[GANSearchAdControllerOptions alloc] init];
  options.prefetchEnabled = YES;
  options.adType = GANSearchAdTypeSPA;
  options.adFetchCount = 3;

  _adController = [[GANSearchAdController alloc]
                     initWithPublisherID: @"your-client-id"
                                 styleID: @"your-settings-id"
                                 options: options
                                delegate: self];

  _adView = [_adController adView];
  [self.scrollView addSubview:_adView];
}

// Request ads when the test button is pressed.
- (void)loadAd:(id)sender {
  // Construct the Ad Request.
  GANSearchAdRequest *adRequest = [[GANSearchAdRequest alloc] init];
  adRequest.query =  @"some-query";
  // Start loading ads. Note that the loading is asynchronous.
  [_adController loadAds: adRequest];
}

// Insert ads into GANAdView if the request returns successfully.
- (void)searchAdController:(GANSearchAdController *)adController  
                didLoadAds:(NSInteger)numberOfAds {
  if (numberOfAds <= 0) {
    NSLog(@"No ads found on the server");
  } else {
    [_adController populateAdView:_adView identifier:@"demoAd"];
  }
}
...