שדרוג DAI v3 ל-v4

ערכות ה-IMA SDK ל-tvOS DAI ו-tvOS בצד הלקוח של tvOS מוזגו בגרסה 4, ועובדו מחדש כקבוצת משנה מדויקת של iOS SDK. כך מפחיתים משמעותית את עקומת הלמידה למפתחי iOS. כתוצאה מכך, חלק מהקוד הדרוש למשתמשי DAI השתנה כדי שיתאים יותר לערכות ה-SDK האחרות שלנו.

במדריך הזה מתואר התהליך הנדרש לשדרוג של הטמעה קיימת של גרסה 3 ל-SDK החדש של גרסה 4.

אם יש לך ספק, עיין בדוגמאות ל-iOS DAI ה-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];

יישום IMAAdsLoaderExplorer לאתחול השידור

השמות של הפונקציות האלה שונו כך שיתאימו ל-SDK של iOS. גם היחסים בין מנהל השידור לבין עדכוני התוכן השתנו. ב-SDK של גרסה 3, אפשר להשתמש במנהל שידור יחיד כדי לנהל מספר שידורים. בגרסה 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];
}

הטמעת IMAStreamManagerManager

כדי לשמור על עקביות עם ערכות ה-SDK ל-iOS, tvOS SDK מספק עכשיו אפשרות של ניהול שידור יחיד, IMAStreamManagerDelegate, לטיפול באירועים שמשודרים בסטרימינג. עכשיו אתם צריכים להשתמש בהצהרת מתג בתוך אותו בעל גישה כדי לנהל אירועים ספציפיים.

השינויים
ישן

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