Upgrade DAI v3 ke v4

IMA SDK untuk DAI tvOS dan Sisi klien tvOS telah digabungkan di versi 4, dan telah dikerjakan ulang sebagai subset yang tepat dari SDK iOS. Hal ini secara signifikan mengurangi kurva pembelajaran bagi developer iOS. Akibatnya, beberapa kode yang diperlukan untuk pengguna DAI telah diubah agar lebih konsisten dengan SDK kami yang lain.

Panduan ini membahas proses yang diperlukan untuk mengupgrade implementasi v3 yang sudah ada ke SDK v4 yang baru.

Jika ragu, lihat contoh DAI iOS; API tvOS v4 sama (kecuali untuk pendamping dan PIP, yang tidak tersedia di tvOS).

Mengubah nama modul

Agar cocok dengan iOS SDK, kami telah mengubah nama modul dari InteractiveMediaAds menjadi GoogleInteractiveMediaAds.

Perubahan
Lama

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Baru

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Lama

@import InteractiveMediaAds;

Baru

@import GoogleInteractiveMediaAds;

Membuat penampung iklan baru

IMAAdDisplayContainer bertanggung jawab untuk mengelola tampilan penampung iklan dan slot iklan pengiring yang digunakan untuk pemutaran iklan.

Perubahan
Lama Tidak ada padanan sebelumnya.
Baru

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

Teruskan IMAVideoDisplay dan IMAAdDisplayContainer ke dalam IMAStreamRequest

Setelah memiliki tampilan video dan IMAAdDisplayContainer,, Anda harus meneruskannya ke permintaan streaming agar IMA SDK dapat mengelolanya.

Perubahan
Lama

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

Baru

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

Meminta dengan IMAAdsLoader

Perubahan
Lama

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

Baru

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

Menerapkan IMAAdsLoaderDelegate untuk inisialisasi aliran data

Fungsi ini telah diganti namanya dan diubah agar konsisten dengan iOS SDK. Hubungan antara pengelola streaming dan streaming juga telah berubah. Di SDK v3, satu pengelola streaming dapat digunakan untuk mengelola beberapa streaming. Di v4, setiap pengelola streaming hanya dapat mengelola satu streaming.

Perubahan
Lama

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

Baru

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

Menerapkan IMAStreamManagerDelegate

Agar konsisten dengan SDK iOS, SDK tvOS kini menyediakan satu delegasi pengelola streaming, IMAStreamManagerDelegate, untuk menangani peristiwa streaming. Kini Anda perlu menggunakan pernyataan switch dalam delegasi tersebut untuk mengelola peristiwa tertentu.

Perubahan
Lama

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

Baru

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