Обновление DAI v3 до v4

Пакеты IMA SDK для tvOS DAI и клиентской части tvOS были объединены в версии 4 и переработаны как точное подмножество iOS SDK. Это значительно сокращает время обучения для разработчиков iOS. В результате часть кода, необходимая для пользователей DAI, была изменена и стала более согласованной с другими нашими SDK.

В этом руководстве описан процесс, необходимый для обновления существующей реализации версии 3 до новой версии SDK версии 4.

Если у вас есть сомнения, обратитесь к образцам iOS DAI — API tvOS v4 тот же (за исключением сопутствующих приложений и PIP, которые недоступны в tvOS).

Изменить имя модуля

Чтобы соответствовать 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. Отношения между менеджером потока и потоком также изменились. В SDK версии 3 один менеджер потоков можно было использовать для управления несколькими потоками. В версии 4 каждый менеджер потоков может управлять только одним потоком.

Изменения
Старый

- (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 для обработки событий потока. Теперь вам нужно использовать оператор переключения внутри этого делегата для управления конкретными событиями.

Изменения
Старый

- (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;
  }
}