DAI v3에서 v4로 업그레이드

IMA DAI SDK 및 IMA 클라이언트 측 SDK는 버전 4에서 병합되었습니다. iOS SDK의 정확한 하위 집합으로 재작업되었습니다. 이로 인해 iOS 개발자의 학습 부담을 줄여줍니다. 따라서 일부 코드는 DAI 사용자에게 필요한 표준이 Google의 다른 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 DAI 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 사용할 수 있습니다 스트림 관리자와 스트림 간의 관계도 변경되었습니다. 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;
  }
}