기본 요건
- Xcode 13 이상
이 가이드에서는 PAL SDK를 호출하여 nonce를 수신하고 재생 이벤트를 모니터링하는 방법을 설명합니다. 완료된 가이드를 따라 하려면 PAL tvOS 샘플 애플리케이션을 다운로드하세요.
프로젝트에 PAL SDK 추가
Swift Package Manager를 사용하여 PAL SDK 설치
프로그래매틱 액세스 라이브러리 SDK는 버전 2.5.3부터 Swift Package Manager를 지원합니다. Swift 패키지를 가져오려면 아래 단계를 따르세요.
Xcode에서 File(파일) > Add Packages(패키지 추가)...로 이동하여 IMA SDK Swift 패키지를 설치합니다.
표시되는 메시지에서 IMA SDK Swift 패키지 GitHub 저장소를 검색합니다.
https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvos사용할 PAL SDK Swift 패키지의 버전을 선택합니다. 새 프로젝트의 경우 Up to Next Major Version(최대 다음 메이저 버전)을 사용하는 것이 좋습니다.
작업을 완료하면 Xcode에서 패키지 종속 항목을 확인하고 백그라운드에서 다운로드합니다. 패키지 종속 항목을 추가하는 방법에 대한 자세한 내용은 Apple 도움말을 참고하세요.
PAL SDK 수동 다운로드 및 설치
Swift Package Manager를 사용하지 않으려면 PAL SDK를 다운로드하여 프로젝트에 수동으로 추가하면 됩니다.
- tvOS용 PAL SDK를 다운로드하고 추출합니다.
- Apple 개발자 가이드에 따라 프로젝트에 프레임워크를 통합합니다.
nonce 생성
'nonce'는 PALNonceLoader를 사용하여 PAL에서 생성한 단일 암호화 문자열입니다. PAL SDK에서는 각 새 스트림 요청에 새로 생성된 nonce가 함께 제공되어야 합니다. 하지만 동일한 스트림 내에서 여러 광고 요청에 대해 nonces를 재사용할 수 있습니다.
아래의 모든 코드 스니펫은 PAL tvOS 샘플 애플리케이션의 ViewController.m에 대한 수정사항입니다.
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 'directedForChildOrUnknownAge' is
// 'NO'. Update the value after the appropriate consent has been gathered.
// By default, PAL automatically determines whether to enable limited ads
// based on the user's TCF (Transparency and Consent Framework) consent data
// on the device. If you must manually override the default behavior,
// for example, to meet your app's requirements, use the
// `PALSettings.forceLimitedAds` property.
PALSettings *settings = [[PALSettings alloc] init];
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 integers. See reference docs for more details.
request.supportedAPIFrameworks = [NSMutableSet setWithArray:@[ @2, @7, @9 ]];
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)을 할 때 givn 매개변수의 값으로 nonce를 설정합니다. nonce는 URL에 안전하므로 URL 인코딩할 필요가 없습니다.
마지막으로 콘텐츠 재생 세션 정보와 클릭을 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를 통한 수익 창출을 개선할 수 있습니다.
서버에서 Ad Manager로 보내는 요청에 nonce를 포함하도록 서드 파티 광고 서버를 구성합니다. 다음은 외부 광고 서버 내에서 구성된 광고 태그의 예입니다.
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 쿼리 매개변수로 대체해야 합니다. 이 작업을 수행하는 방법에 관한 자세한 내용은 서드 파티 광고 서버의 문서를 참고하세요.