开始使用

前提条件

  • Xcode 13 或更高版本

本指南介绍了如何调用 PAL SDK 来接收 Nonce 并监控 播放事件。要按照完整指南进行操作,请下载 PAL tvOS 示例应用

将 PAL SDK 添加到您的项目中

使用 Swift Package Manager 安装 PAL SDK

Programmatic Access Library SDK 支持 Swift Package Manager 版本。按照 导入 Swift 软件包的步骤。

  1. 在 Xcode 中,前往 文件 >添加软件包...

  2. 在显示的提示中,搜索 IMA SDK Swift Package GitHub 代码库:

    https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvos
    
  3. 选择您要使用的 PAL SDK Swift 软件包的版本。 对于新项目,我们建议使用 Up to Next Major Version

完成上述操作后,Xcode 会解析您的软件包依赖项 并在后台下载它们如需详细了解如何添加软件包 请参阅 Apple 的文章

手动下载并安装 PAL SDK

如果您不想使用 Swift Package Manager,可以下载 PAL SDK 可以将其手动添加到项目中

  1. 下载并解压缩 PAL SDK for iOS
  2. 请按照 Apple 开发者指南将该框架整合到您的项目中。

生成 Nonce

“Nonce”是由 PAL 使用 PALNonceLoader。PAL SDK 要求附带每个新的视频流请求 由新生成的 Nonce 生成。不过,Nonce 可以重复用于多个广告 请求数量。

下面的所有代码段均经过修改 ViewController.mPAL tvOS 示例应用

如需请求 Nonce,请先导入 PAL 库:

@import ProgrammaticAccessLibrary;

接下来,创建 PALNonceLoader 的实例,并为二者添加桩 委托方法:

@interface ViewController () <PALNonceLoaderDelegate>
// The nonce loader to use for nonce requests.
@property(nonatomic) PALNonceLoader *nonceLoader;
// The view in which a video would play.
// In this sample, it is mocked for simplification.
@property(nonatomic, weak) IBOutlet UIView *videoView;
@end
...
- (void) viewDidLoad {
  [super viewDidLoad];
  // The default value for 'allowStorage' and
  // 'directedForChildOrUnknownAge' is 'NO', but should be updated once the
  // appropriate consent has been gathered. Publishers should either
  // integrate with a CMP or use a different method to handle storage consent.
  PALSettings *settings = [[PALSettings alloc] init];
  settings.allowStorage = YES;
  settings.directedForChildOrUnknownAge = NO;

  self.nonceLoader = [[PALNonceLoader alloc] initWithSettings:settings];
  self.nonceLoader.delegate = self;
}

#pragma mark - PALNonceLoaderDelegate methods

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
            withRequest:(PALNonceRequest *)request
    didLoadNonceManager:(PALNonceManager *)nonceManager {
}

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
         withRequest:(PALNonceRequest *)request
    didFailWithError:(NSError *)error {
}

然后,启动一个 Nonce 请求,填充其属性,并将其用于 初始化 Nonce 管理器:

@interface ViewController () <PALNonceLoaderDelegate>
// The nonce loader to use for nonce requests.
@property(nonatomic) PALNonceLoader *nonceLoader;
// The nonce manager result from the last successful nonce request.
@property(nonatomic) PALNonceManager *nonceManager;
// The view in which a video would play. In this sample, it is mocked for
// simplification.
@property(nonatomic, weak) IBOutlet UIView *videoView;
@end

...

- (void)viewDidLoad {
  ...
  self.nonceLoader.delegate = self;
  [self requestNonceManager];
}

...

#pragma mark - UI Callback methods

/**
 * Requests a new nonce manager with a request containing arbitrary test values
 * like a (sane) user might supply. Displays the nonce or error on success. This
 * should be called once per stream.
 *
 * The PALNonceRequest parameters set here are example parameters.
 * You should set your parameters based on your own app characteristics.
 */
- (void)requestNonceManager {
  PALNonceRequest *request = [[PALNonceRequest alloc] init];
  request.continuousPlayback = PALFlagOff;
  request.descriptionURL = [NSURL URLWithString:@"https://example.com/desc?key=val"];
  request.iconsSupported = YES;
  request.playerType = @"AwesomePlayer";
  request.playerVersion = @"4.2.1";
  request.PPID = @"123987456";
  request.sessionID = @"Sample SID";
  // Sample API framework integer. See reference docs for more details.
  NSInteger SampleAPIFramework = 501;
  request.supportedApiFrameworks = [NSMutableSet setWithArray:@[ SampleAPIFramework ]];
  request.videoPlayerHeight = 480;
  request.videoPlayerWidth = 640;
  request.willAdAutoPlay = PALFlagOn;
  request.willAdPlayMuted = PALFlagOff;

  if (self.nonceManager) {
    // Detach the old nonce manager's gesture recognizer before destroying it.
    [self.videoView removeGestureRecognizer:self.nonceManager.gestureRecognizer];
    self.nonceManager = nil;
  }
  [self.nonceLoader loadNonceManagerWithRequest:request];
}

最后,填充 Nonce 加载器委托以记录生成的 Nonce:

#pragma mark - PALNonceLoaderDelegate methods

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
            withRequest:(PALNonceRequest *)request
    didLoadNonceManager:(PALNonceManager *)nonceManager {
  NSLog(@"Programmatic access nonce: %@", nonceManager.nonce);
  // Capture the created nonce manager and attach its gesture recognizer to the video view.
  self.nonceManager = nonceManager;
  [self.videoView addGestureRecognizer:self.nonceManager.gestureRecognizer];
}

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
         withRequest:(PALNonceRequest *)request
    didFailWithError:(NSError *)error {
  NSLog(@"Error generating programmatic access nonce: %@", error);
}

在进行直接 VAST 调用 (DVC) 时,请将 Nonce 的值设为 givn 参数。Nonce 具有网址安全性,您无需对其进行网址编码。

最后,您需要添加用于处理内容播放会话的发送方法 信息和点击传递给 SDK。请参阅以下示例, sendPlaybackStartsendPlaybackEndsendAdClick 方法:

...

// Reports the start of playback for the current content session.
- (void)sendPlaybackStart {
  [self.nonceManager sendPlaybackStart];
}

// Reports the end of playback for the current content session.
- (void)sendPlaybackEnd {
  [self.nonceManager sendPlaybackEnd];
}

// Reports an ad click for the current nonce manager, if not nil.
- (void)sendAdClick {
  [self.nonceManager sendAdClick];
}

在您的实现中,应在“视频播放器”上调用 sendPlaybackStart 开始”以响应 用户发起的操作(点击播放)或应用发起的操作(自动播放); 播放结束时应调用 sendPlaybackEnd,并应调用 sendAdClick 在观看者每次点击广告时调用。

(可选)通过第三方广告服务器发送 Google Ad Manager 信号

配置第三方广告服务器向 Ad Manager 发出的请求。在您之后 完成以下步骤后,Nonce 参数将从 PAL SDK 传播, 然后将数据传输到 Google Ad Manager这样一来, 通过 Google Ad Manager 获得更高收益

配置您的第三方广告服务器,以在该服务器的 向 Ad Manager 发送广告请求下面是在 第三方广告服务器:

https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...

有关详情,请参阅 Google Ad Manager 服务器端实施 指南

Ad Manager 会查找 givn= 以标识 Nonce 值。第三方广告 服务器需要支持自己的某个宏,例如 %%custom_key_for_google_nonce%%,并将其替换为 Nonce 查询参数 您在上一步中提供的 ID。详细了解如何实现这一目标 。