시작하기

기본 요건

  • Xcode 13 이상

이 가이드에서는 PAL SDK를 호출하여 nonce를 수신하고 재생 이벤트를 모니터링하는 방법을 설명합니다. PAL을 사용하여 nonce를 생성하는 샘플 앱을 보려면 GitHub에서 iOS 예를 다운로드하세요.

프로젝트에 PAL SDK 추가

Swift Package Manager를 사용해 PAL SDK 설치

프로그래매틱 액세스 라이브러리 SDK는 버전 2.5.3부터 Swift Package Manager를 지원합니다. Swift 패키지를 가져오려면 아래 단계를 따르세요.

  1. Xcode에서 File(파일) > Add Packages(패키지 추가)...로 이동하여 IMA SDK Swift 패키지를 설치합니다.

  2. 표시되는 메시지에서 IMA SDK Swift Package GitHub 저장소를 검색합니다.

    https://github.com/googleads/swift-package-manager-google-programmatic-access-library-ios
    
  3. 사용할 PAL SDK Swift 패키지의 버전을 선택합니다. 새 프로젝트의 경우 Up to Next Major Version(최대 다음 메이저 버전)을 사용하는 것이 좋습니다.

작업을 완료하면 Xcode가 패키지 종속 항목을 리졸브하여 백그라운드에서 다운로드합니다. 패키지 종속 항목을 추가하는 방법에 관한 자세한 내용은 Apple 문서를 참고하세요.

수동으로 PAL SDK 다운로드 및 설치

Swift Package Manager를 사용하지 않으려면 PAL SDK를 다운로드하여 프로젝트에 수동으로 추가하면 됩니다.

  1. iOS용 PAL SDK를 다운로드하여 추출합니다.
  2. Apple 개발자 가이드에 따라 프로젝트에 프레임워크를 통합하세요.

nonce 생성

'nonce'는 PALNonceLoader를 사용하여 PAL에서 생성된 암호화된 단일 문자열입니다. PAL SDK를 사용하려면 각각의 새 스트림에 새로 생성된 nonce가 있어야 합니다. 그러나 nonce는 동일한 스트림 내의 여러 광고 요청에 재사용할 수 있습니다.

아래의 모든 코드 스니펫은 PAL iOS 샘플 애플리케이션ViewController.m를 수정한 것입니다.

nonce를 요청하려면 먼저 PAL 라이브러리를 가져옵니다.

@import ProgrammaticAccessLibrary;

스트림 상관자(&scor)는 여전히 새 스트림마다 한 번씩 재설정되어야 합니다. 동일한 스트림의 모든 광고 요청은 최대 게재빈도 설정 및 경쟁 제외 기능이 제대로 작동하려면 동일한 PALNonceLoader 및 스트림 상관자 값을 공유해야 합니다.

다음으로 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.
 */
- (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";
  request.OMIDVersion = @"1.2.3";

  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는 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 쿼리 매개변수로 대체해야 합니다. 이를 수행하는 방법에 대한 자세한 내용은 외부 광고 서버 설명서를 참조하세요.