必要條件
- Xcode 13 以上版本。
本指南說明如何叫用 PAL SDK 來接收 Nonce 和監控器 播放事件。如果想查看使用 PAL 產生 Nonce 的範例應用程式, 從 GitHub 下載 iOS 範例。
在專案中新增 PAL SDK
使用 Swift Package Manager 安裝 PAL SDK
程式輔助存取權資料庫 SDK 支援 Swift 套件 Manager,從 2.5.3 版開始。跟著 如何匯入 Swift 套件。
在 Xcode 中前往以下網址,安裝 PAL SDK Swift 套件: 檔案 >新增套件...。
在隨即顯示的提示中,搜尋 PAL SDK Swift 套件 GitHub 存放區:
https://github.com/googleads/swift-package-manager-google-programmatic-access-library-ios
選取您要使用的 PAL SDK Swift 套件版本。 如要建立新專案,建議您使用直到下一個主要版本。
完成後,Xcode 會解析套件依附元件 在背景中下載這些檔案進一步瞭解如何新增套件 依附元件,請參閱 Apple 的文章。
手動下載並安裝 PAL SDK
如果不想使用 Swift Package Manager,可以下載 PAL SDK 手動將其加入專案中。
- 下載並擷取 PAL SDK for iOS
- 按照 Apple 開發人員指南將架構導入您的專案。
產生 Nonce
一個「nonce」是 PAL 使用
PALNonceLoader
。PAL SDK 規定每個新串流都必須與
新建立的 Nonce不過,您可以針對多個廣告請求重複使用 Nonce
同一個串流內。
下方所有程式碼片段都在 ViewController.m
修改
PAL iOS 範例應用程式。
如要要求 Nonce,請先匯入 PAL 程式庫:
@import ProgrammaticAccessLibrary;
您仍然能控制串流 Correlator (或 &scor
),
就會重設一次同一個串流的所有廣告請求應共用
展示頻率上限和串流 Correlator 值使用相同的 PALNonceLoader
和串流 Correlator 值
競爭排除功能才能正常運作
接下來,建立 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 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;
request.OMIDPartnerName = @"SamplePartner";
request.OMIDPartnerVersion = @"6.2.1";
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請參閱以下範例,瞭解導入
sendPlaybackStart
、sendPlaybackEnd
和 sendAdClick
方法:
...
// 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 查詢參數
您提供的虛擬機器進一步瞭解如何完成這項作業
相關資訊。