Nâng cấp từ phiên bản 3 lên phiên bản 4

SDK IMA DAI và SDK phía máy khách IMA đã được hợp nhất trong phiên bản 4, và đã được thiết kế lại thành một tập hợp con chính xác của SDK iOS. Điều này đáng kể giúp nhà phát triển iOS mất nhiều thời gian để học hỏi hơn. Do đó, một số mã bắt buộc đối với người dùng DAI đã thay đổi để nhất quán hơn với các SDK khác của chúng tôi.

Hướng dẫn này trình bày quy trình cần thiết để nâng cấp phiên bản 3 hiện có cho SDK phiên bản 4 mới.

Nếu nghi ngờ, hãy tham khảo Mẫu DAI trên iOS– API tvOS v4 vẫn giữ nguyên (ngoại trừ quảng cáo đồng hành và PIP không có sẵn trên tvOS).

Thay đổi tên mô-đun

Để phù hợp với SDK iOS, chúng tôi đã thay đổi tên mô-đun từ InteractiveMediaAds đến GoogleInteractiveMediaAds.

Các thay đổi

#import <InteractiveMediaAds/InteractiveMediaAds.h>
Mới

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

@import InteractiveMediaAds;
Mới

@import GoogleInteractiveMediaAds;

Tạo vùng chứa quảng cáo mới

IMAAdDisplayContainer chịu trách nhiệm quản lý chế độ xem vùng chứa quảng cáo và vùng quảng cáo đồng hành được dùng để phát lại quảng cáo.

Các thay đổi
Không có phiên bản trước nào tương đương.
Mới

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

Chuyển IMAVideoDisplay và IMAAdDisplayContainer vào IMAStreamRequest

Giờ bạn đã có màn hình video và IMAAdDisplayContainer, bạn cần truyền chúng đến yêu cầu luồng để SDK IMA DAI có thể quản lý chúng.

Các thay đổi

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

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

Yêu cầu bằng IMAAdsLoader

Các thay đổi

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

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

Triển khai IMAAdsLoaderDelegate để khởi chạy luồng

Các hàm này đã được đổi tên và sửa đổi để nhất quán với iOS SDK. Mối quan hệ giữa người quản lý sự kiện phát trực tiếp và sự kiện phát trực tiếp cũng đã thay đổi. Trong SDK phiên bản 3, một trình quản lý luồng duy nhất có thể được dùng để quản lý nhiều luồng. Trong phiên bản 4, mỗi người quản lý sự kiện phát trực tiếp chỉ có thể quản lý một sự kiện phát trực tiếp duy nhất.

Các thay đổi

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

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

Triển khai IMAStreamManagerDelegate

Để nhất quán với SDK iOS, SDK tvOS hiện cung cấp một luồng duy nhất uỷ quyền của người quản lý, IMAStreamManagerDelegate, để xử lý các sự kiện trong luồng. Bạn bây giờ cần sử dụng một câu lệnh chuyển đổi trong uỷ quyền đó để quản lý cụ thể sự kiện.

Các thay đổi

- (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;
}
Mới

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