การอัปเกรด DAI v3 เป็น v4

IMA SDK สำหรับฝั่งไคลเอ็นต์ของ tvOS DAI และ tvOS ได้รับการผสานรวมเข้าด้วยกันในเวอร์ชัน 4 และมีการปรับปรุงใหม่ให้เป็นชุดย่อยของ iOS SDK ทั้งหมด วิธีนี้จะช่วยลดเวลาในการเรียนรู้ของนักพัฒนาซอฟต์แวร์ iOS ได้อย่างมาก ด้วยเหตุนี้ โค้ดบางส่วนสำหรับผู้ใช้ DAI จึงมีการเปลี่ยนแปลงให้สอดคล้องกับ SDK อื่นๆ ของเรามากขึ้น

คู่มือนี้จะแนะนำกระบวนการที่จำเป็นในการอัปเกรดการใช้งาน v3 ที่มีอยู่เป็น SDK v4 ใหม่

หากมีข้อสงสัย โปรดอ่านตัวอย่าง iOS DAI ตัวอย่าง tvOS v4 API นั้นเหมือนกัน (ยกเว้นโฆษณาที่แสดงร่วมและ PIP ซึ่งไม่มีอยู่ใน tvOS)

เปลี่ยนชื่อโมดูล

เราได้เปลี่ยนชื่อโมดูลจาก InteractiveMediaAds เป็น GoogleInteractiveMediaAds เพื่อให้ตรงกับ iOS SDK แล้ว

การเปลี่ยนแปลง
เก่า

#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 นอกจากนี้ ความสัมพันธ์ระหว่างผู้จัดการสตรีมกับสตรีมก็มีการเปลี่ยนแปลงด้วยเช่นกัน ใน SDK v3 จะใช้ตัวจัดการสตรีมเพียงตัวเดียวเพื่อจัดการสตรีมหลายรายการได้ ในเวอร์ชัน 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 จึงมีการมอบสิทธิ์จัดการสตรีมเพียง 1 รายการ ซึ่งก็คือ 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;
  }
}