DAI v3에서 v4로 업그레이드

tvOS DAI 및 tvOS 클라이언트 측용 IMA SDK가 버전 4에서 병합되었으며 iOS SDK의 정확한 하위 집합으로 재작업되었습니다. 따라서 iOS 개발자의 학습 시간이 크게 줄어듭니다. 따라서 DAI 사용자에게 필요한 일부 코드가 다른 SDK와 더 일관되도록 변경되었습니다.

이 가이드에서는 기존 v3 구현을 새 v4 SDK로 업그레이드하는 데 필요한 프로세스를 설명합니다.

확실하지 않다면 iOS DAI 샘플을 참조하세요. tvOS v4 API는 동일합니다 (tvOS에서 사용할 수 없는 컴패니언과 PIP는 제외).

모듈 이름 변경

iOS SDK와 일치시키기 위해 모듈 이름을 InteractiveMediaAds에서 GoogleInteractiveMediaAds로 변경했습니다.

변경사항
변경 전

#import <InteractiveMediaAds/InteractiveMediaAds.h>

신규

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

변경 전

@import InteractiveMediaAds;

신규

@import GoogleInteractiveMediaAds;

새 광고 컨테이너 만들기

IMAAdDisplayContainer는 광고 컨테이너 뷰와 광고 재생에 사용되는 컴패니언 광고 슬롯을 관리합니다.

변경사항
변경 전 이에 상응하는 이전 항목이 없습니다.
신규

self.adDisplayContainer =
    [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView];

IMAVideoDisplay 및 IMAAdDisplayContainer를 IMAStreamRequest에 전달

이제 동영상 디스플레이와 IMAAdDisplayContainer,가 있으므로 IMA SDK에서 관리할 수 있도록 스트림 요청에 이를 전달해야 합니다.

변경사항
변경 전

IMALiveStreamRequest *streamRequest =
    [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey];
IMAVODStreamRequest *streamRequest =
    [[IMAVODStreamRequest alloc] initWithContentSourceID:kContentSourceID
                                                 videoID:kVideoID];

신규

IMALiveStreamRequest *streamRequest =
    [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey
                                adDisplayContainer:self.adDisplayContainer
                                      videoDisplay:self.videoDisplay];
IMAVODStreamRequest *streamRequest =
      [[IMAVODStreamRequest alloc] initWithContentSourceId:kContentSourceID
                                                   videoId:kVideoID
                                        adDisplayContainer:self.adDisplayContainer
                                              videoDisplay:self.videoDisplay];

IMAAdsLoader를 사용하여 요청

변경사항
변경 전

self.streamManager =
    [[IMAStreamManager alloc] initWithVideoDisplay:self.videoDisplay];
self.streamManager.delegate = self;
[self.streamManager requestStream:streamRequest];

신규

self.adsLoader = [[IMAAdsLoader alloc] init];
self.adsLoader.delegate = self;
[self.adsLoader requestStreamWithRequest:streamRequest];

스트림 초기화를 위해 IMAAdsLoaderDelegate 구현

이 함수는 iOS SDK와 일관되도록 이름이 변경되고 수정되었습니다. 스트림 관리자와 스트림 간의 관계도 변경되었습니다. v3 SDK에서는 단일 스트림 관리자를 사용하여 여러 스트림을 관리할 수 있습니다. v4에서 각 스트림 관리자는 하나의 스트림만 관리할 수 있습니다.

변경사항
변경 전

- (void)streamManager:(IMAStreamManager *)streamManager
    didInitializeStream:(NSString *)streamID {
  NSLog(@"Stream initialized with streamID: %@", streamID);
}

- (void)streamManager:(IMAStreamManager *)streamManager
      didReceiveError:(NSError *)error {
  NSLog(@"Error: %@", error);
  [self playBackupStream];
}

신규

- (void)adsLoader:(IMAAdsLoader *)loader
    adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
  self.streamManager = adsLoadedData.streamManager;
  self.streamManager.delegate = self;
  [self.streamManager initializeWithAdsRenderingSettings:nil];
  NSLog(@"Stream initialized with streamID: %@", self.streamManager.streamId);
}

- (void)adsLoader:(IMAAdsLoader *)loader
    failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
  NSLog(@"Error: %@", adErrorData.adError);
  [self playBackupStream];
}

IMAStreamManagerDelegate 구현

iOS SDK와의 일관성을 위해 tvOS SDK는 이제 스트림 이벤트를 처리하기 위해 단일 스트림 관리자 대리자 IMAStreamManagerDelegate를 제공합니다. 이제 해당 대리자 내에서 switch 문을 사용하여 특정 이벤트를 관리해야 합니다.

변경사항
변경 전

- (void)streamManager:(IMAStreamManager *)streamManager
      adBreakDidStart:(IMAAdBreakInfo *)adBreakInfo {
  NSLog(@"Ad break started");
  self.playerViewController.requiresLinearPlayback = YES;
}

- (void)streamManager:(IMAStreamManager *)streamManager
        adBreakDidEnd:(IMAAdBreakInfo *)adBreakInfo {
  NSLog(@"Ad break ended");
  self.playerViewController.requiresLinearPlayback = NO;
}

신규

- (void)streamManager:(IMAStreamManager *)streamManager
    didReceiveAdEvent:(IMAAdEvent *)event {
  NSLog(@"StreamManager event (%@).", event.typeString);
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_STARTED: {
      NSLog(@"Ad break started");
      self.playerViewController.requiresLinearPlayback = YES;
      break;
    }
    case kIMAAdEvent_AD_BREAK_ENDED: {
      NSLog(@"Ad break ended");
      self.playerViewController.requiresLinearPlayback = NO;
      break;
    }
    // And so on for other events.
    default:
      break;
  }
}