開始使用

必要條件

  • Xcode 13 以上版本

本指南說明如何叫用 PAL SDK 來接收 Nonce 和監控器 播放事件。如要按照完整指南操作,請下載 PAL tvOS 範例應用程式

在專案中新增 PAL SDK

使用 Swift Package Manager 安裝 PAL SDK

程式輔助存取權資料庫 SDK 支援 Swift 套件 Manager,從 2.5.3 版開始。跟著 如何匯入 Swift 套件。

  1. 在 Xcode 中,前往 檔案 >新增套件...

  2. 在隨即顯示的提示中,搜尋 IMA SDK Swift 套件 GitHub 存放區:

    https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvos
    
  3. 選取您要使用的 PAL SDK Swift 套件版本。 如要建立新專案,建議您使用直到下一個主要版本

完成後,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 賺取更多收益

設定第三方廣告伺服器,將 Nonce 加入伺服器的 向 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 查詢參數 您提供的虛擬機器進一步瞭解如何完成這項作業 相關資訊。