ارتقاء DAI نسخه 3 به نسخه 4

کیت‌های توسعه نرم‌افزار IMA برای tvOS DAI و tvOS Client-side در نسخه 4 ادغام شده‌اند و به‌عنوان زیرمجموعه دقیق iOS SDK دوباره کار شده‌اند. این به طور قابل توجهی منحنی یادگیری را برای توسعه دهندگان iOS کاهش می دهد. در نتیجه، برخی از کدهای مورد نیاز برای کاربران DAI تغییر کرده است تا با سایر SDK های ما سازگارتر باشد.

این راهنما فرآیند مورد نیاز برای ارتقاء یک پیاده‌سازی نسخه 3 موجود به SDK جدید v4 را طی می‌کند.

اگر شک دارید، با نمونه‌های DAI iOS مشورت کنید — API tvOS v4 یکسان است (به جز همراهان و PIP که در tvOS در دسترس نیستند).

نام ماژول را تغییر دهید

برای مطابقت با iOS SDK، نام ماژول را از InteractiveMediaAds به GoogleInteractiveMediaAds تغییر داده‌ایم.

تغییرات
قدیمی

#import <InteractiveMediaAds/InteractiveMediaAds.h>
جدید

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
قدیمی

@import InteractiveMediaAds;
جدید

@import GoogleInteractiveMediaAds;

ظرف تبلیغات جدید را ایجاد کنید

IMAAdDisplayContainer مسئول مدیریت نمای کانتینر آگهی و جایگاه های تبلیغات همراه مورد استفاده برای پخش آگهی است.

تغییرات
قدیمی هیچ معادل قبلی وجود ندارد.
جدید

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

IMAVideoDisplay و IMAAdDisplayContainer را به IMAStreamRequest منتقل کنید

اکنون که یک نمایشگر ویدیو و IMAAdDisplayContainer, باید آنها را به درخواست جریان ارسال کنید تا IMA SDK بتواند آنها را مدیریت کند.

تغییرات
قدیمی

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

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

تغییرات
قدیمی

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

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

پیاده سازی IMAAdsLoaderDelegate برای مقداردهی اولیه جریان

این توابع تغییر نام داده و اصلاح شده اند تا با iOS SDK سازگار باشند. رابطه بین مدیر جریان و جریان نیز تغییر کرده است. در نسخه 3 SDK، یک مدیر جریان می‌تواند برای مدیریت چند جریان استفاده شود. در نسخه 4، هر مدیر جریان تنها می تواند یک جریان واحد را مدیریت کند.

تغییرات
قدیمی

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

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

پیاده سازی IMAStreamManagerDelegate

برای سازگاری با iOS SDK، tvOS SDK اکنون یک نماینده مدیریت جریان، IMAStreamManagerDelegate برای مدیریت رویدادهای جریان ارائه می‌کند. اکنون باید از عبارت switch در آن نماینده برای مدیریت رویدادهای خاص استفاده کنید.

تغییرات
قدیمی

- (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;
}
جدید

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