DAI v3'ten v4'e yükseltme

tvOS DAI ve tvOS İstemci tarafı için IMA SDK'lar, sürüm 4'te birleştirildi ve iOS SDK'nın tam bir alt kümesi olarak yeniden işlenmiştir. Bu da iOS geliştiricilerinin öğrenme eğrisini önemli ölçüde kısaltıyor. Bunun sonucunda, DAI kullanıcıları için gerekli olan bazı kodlar diğer SDK'larımızla daha tutarlı olacak şekilde değiştirilmiştir.

Bu kılavuzda, mevcut bir v3 uygulamasını yeni v4 SDK'sına yükseltmek için gereken süreç açıklanmaktadır.

Emin değilseniz iOS DAI örneklerine bakın. tvOS v4 API aynıdır (tvOS'de kullanılamayan tamamlayıcılar ve PIP hariç).

Modül adını değiştirme

iOS SDK ile eşleştirmek için InteractiveMediaAds olan modül adını GoogleInteractiveMediaAds olarak değiştirdik.

Değişiklikler
Önceki

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Yeni

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Önceki

@import InteractiveMediaAds;

Yeni

@import GoogleInteractiveMediaAds;

Yeni reklam kapsayıcısını oluşturma

IMAAdDisplayContainer, reklam kapsayıcısı görünümünü ve reklam oynatma için kullanılan tamamlayıcı reklam alanlarını yönetmekten sorumludur.

Değişiklikler
Önceki Daha önce eşdeğeri yoktur.
Yeni

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

IMAVideoDisplay ve IMAAdDisplayContainer'ı IMAStreamRequest'e iletme

Artık video görüntülü reklamınız ve IMAAdDisplayContainer, olduğuna göre, IMA SDK'nın yönetebilmesi için bunları akış isteğine iletmeniz gerekir.

Değişiklikler
Önceki

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

Yeni

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 ile İstek

Değişiklikler
Önceki

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

Yeni

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

Akış başlatma için IMAAdsLoaderPause'ı uygulama

Bu işlevler, iOS SDK'sı ile tutarlı olacak şekilde yeniden adlandırıldı ve değiştirildi. Akış yöneticisi ile yayın arasındaki ilişki de değişti. v3 SDK'sında birden fazla akışı yönetmek için tek bir akış yöneticisi kullanılabilir. v4'te her akış yöneticisi yalnızca tek bir akışı yönetebilir.

Değişiklikler
Önceki

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

Yeni

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

IMAStreamManagerManager'ı uygulama

iOS SDK'larıyla tutarlılık sağlamak amacıyla tvOS SDK'sı artık akış etkinliklerini yönetmek için tek bir akış yöneticisi temsilcisi (IMAStreamManagerDelegate) sağlıyor. Artık belirli etkinlikleri yönetmek için bu yetki verilmiş kullanıcı içinde bir Switch ifadesi kullanmanız gerekir.

Değişiklikler
Önceki

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

Yeni

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