Nâng cấp DAI từ v3 lên v4

SDK IMA cho phía máy khách của DAI và tvOS đã được hợp nhất trong phiên bản 4 và được thiết kế lại dưới dạng một tập hợp con chính xác của SDK iOS. Điều này giúp làm giảm đáng kể thời gian tìm hiểu cho nhà phát triển iOS. Do đó, một số mã cần thiết cho 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 quy trình triển khai phiên bản 3 hiện có lên SDK phiên bản 4 mới.

Nếu bạn không chắc chắn, hãy tham khảo mẫu DAI cho iOS – API tvOS phiên bản 4 đều giống nhau (ngoại trừ quảng cáo đồng hành và PIP không có 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 thành 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ý khung hiển thị vùng chứa quảng cáo và vùng quảng cáo đồng hành dùng để phát quảng cáo.

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

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

Chuyển IMAVideoDisplay và IMAAdDisplayContainer vào IMAStreamRequest

Giờ đây, bạn đã có màn hình video và IMAAdDisplayContainer, bạn cần chuyển các hình ảnh đó đến yêu cầu phát trực tiếp để SDK IMA 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 IMAAdsLoaderLoader để khởi chạy luồng

Các hàm này đã được đổi tên cũng như sửa đổi để phù hợp với SDK iOS. Mối quan hệ giữa người quản lý luồng và luồng cũng đã thay đổi. Trong SDK phiên bản 3, bạn có thể sử dụng một trình quản lý luồng duy nhất để quản lý nhiều luồng. Trong v4, mỗi người quản lý luồng chỉ có thể quản lý một trình 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 thực thể đại diện trình quản lý luồng duy nhất, IMAStreamManagerDelegate, để xử lý các sự kiện phát trực tiếp. Bây giờ, bạn cần sử dụng câu lệnh chuyển đổi trong uỷ quyền đó để quản lý các sự kiện cụ thể.

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