Uaktualnienie DAI z wersji 3 do 4

Pakiety IMA SDK na potrzeby DAI w tvOS i tvOS po stronie klienta zostały scalone w wersji 4 i odtworzone jako dokładny podzbiór pakietu SDK na iOS. To znacznie skraca proces uczenia się programistów aplikacji na iOS. W efekcie zmieniliśmy część kodu wymaganego przez użytkowników dynamicznego wstawiania reklam, by była bardziej zgodna z innymi pakietami SDK.

W tym przewodniku omówiono proces wymagany do uaktualnienia obecnej implementacji w wersji 3 do nowego pakietu SDK w wersji 4.

Jeśli masz wątpliwości, zapoznaj się z przykładami funkcji DAI w iOS, w której interfejs API tvOS w wersji 4 jest taki sam (z wyjątkiem reklam towarzyszących i obrazu PIP, które są niedostępne w tvOS).

Zmiana nazwy modułu

Aby była zgodna z pakietem SDK na iOS, zmieniliśmy nazwę modułu z InteractiveMediaAds na GoogleInteractiveMediaAds.

Zmiany
Stara wersja

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Nowi

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Stara wersja

@import InteractiveMediaAds;

Nowi

@import GoogleInteractiveMediaAds;

Tworzenie nowego kontenera reklam

IMAAdDisplayContainer odpowiada za zarządzanie widokiem kontenera reklamy i boksami reklam towarzyszących używanymi do odtwarzania reklam.

Zmiany
Stara wersja Nie ma poprzedniego odpowiednika.
Nowi

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

Przekazuj pakiety IMAVideoDisplay i IMAAdDisplayContainer do żądania IMAStreamRequest

Gdy masz już wyświetlacz wideo i element IMAAdDisplayContainer,, musisz je przekazać w żądaniu strumienia, aby pakiet IMA SDK mógł nimi zarządzać.

Zmiany
Stara wersja

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

Nowi

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

Żądanie z użyciem IMAAdsLoader

Zmiany
Stara wersja

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

Nowi

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

Implementowanie pakietu IMAAdsLoaderDelegat na potrzeby inicjowania strumienia

Te funkcje zostały zmienione i zmodyfikowane, aby były zgodne z pakietem SDK na iOS. Zmieniła się również relacja między menedżerem strumienia a transmisją. W pakiecie SDK w wersji 3 można używać 1 menedżera strumieni do zarządzania wieloma strumieniami. W wersji 4 każdy menedżer strumienia może zarządzać tylko 1 transmisją.

Zmiany
Stara wersja

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

Nowi

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

Wdrażanie agenta pakietu IMAStreamManager

Aby zapewnić spójność z pakietami SDK na iOS, pakiet SDK tvOS udostępnia teraz jedną osobę z przekazanym dostępem do menedżera strumienia (IMAStreamManagerDelegate) do obsługi zdarzeń strumienia. Teraz do zarządzania określonymi zdarzeniami musisz użyć instrukcji Switch w tym delegacji.

Zmiany
Stara wersja

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

Nowi

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