הגדרת IMA SDK ל-DAI

ערכות IMA SDK מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות. ‫IMA SDKs יכולים לשלוח בקשות למודעות מכל שרת מודעות שתואם ל-VAST ולנהל את ההפעלה של המודעות באפליקציות. באמצעות IMA DAI SDK, האפליקציות שולחות בקשה לסטרימינג של מודעות ותוכן וידאו – תוכן VOD או תוכן בשידור חי. לאחר מכן, ה-SDK מחזיר זרם וידאו משולב, כך שלא צריך לנהל את המעבר בין מודעה לתוכן וידאו באפליקציה.

בחירת פתרון DAI שמעניין אתכם

הצגת DAI ב-Pod

במדריך הזה מוסבר איך להפעיל שידור חי או סטרימינג של תוכן וידאו על פי דרישה (VOD) עם הפסקות פרסומיות של DAI באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו. כדי לראות או לעקוב אחרי שילוב לדוגמה שהושלם, מורידים את אפליקציית הדוגמה Pod Serving ‏(Obj C או Swift).

סקירה כללית על הצגת מודעות דינמיות (DAI) ב-IMA

הטמעה של הצגת מודעות בפוד באמצעות IMA DAI SDK ל-tvOS כוללת שני רכיבים עיקריים:

  • StreamRequest: אובייקט שמגדיר בקשה להזרמת נתונים לשרתי הפרסום של Google. צריך ליצור אותו באמצעות IMAPodStreamRequest או IMAPodVODStreamRequest כדי להפעיל את האפשרות להצגת פודים. בשתי השיטות נדרש קוד רשת, ובשיטה IMAPodStreamRequest נדרש גם מפתח נכס מותאם אישית. מפתח API הוא אופציונלי.

  • IMAStreamManager: אובייקט שמטפל בתקשורת בין זרם הווידאו לבין IMA DAI SDK, כמו הפעלת פינגים למעקב והעברת אירועים של הזרם לבעל האפליקציה.

דרישות מוקדמות

לפני שמתחילים, צריך:

  • ‫Xcode 13 ואילך.
  • CocoaPods (מומלץ), Swift Package Manager או עותק להורדה של IMA DAI SDK ל-tvOS.
  • אפליקציית tvOS שכבר הוגדרה עם IMA DAI SDK להפעלת סטרימינג של וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש בסיס קוד שמופיע במדריך הזה. מידע נוסף על הטמעה של IMA DAI SDK זמין במדריך למתחילים.

הגדרת משתנים להצגת מודעות ב-Pod

כל השינויים שנדרשים להצגת מודעות ב-Pod מתבצעים ב-ViewController.swift ב-Swift או ב-ViewController.m ב-Objective-C. קטעי הקוד במדריך הזה מוגדרים כברירת מחדל לשימוש בשפת Swift. השלב הראשון הוא לעדכן את המשתנים הקבועים.

אלה הקבועים של בקשת הזרמת חבילת מודעות שצריך להוסיף:

  • STREAM_URL (משמש רק לשידורים חיים): כתובת ה-URL של זרם הווידאו שסופקה על ידי כלי לשינוי מניפסט או שותף צד שלישי באמצעות הצגת מודעות בתוך פוד. הוא צריך לדרוש ממך להוסיף את מזהה הסטרימינג שסופק על ידי IMA DAI SDK, לפני שאתה שולח בקשה. במקרה הזה, כתובת ה-URL של הסטרימינג כוללת placeholder,‏ "[[STREAMID]]", שמוחלף במזהה הסטרימינג לפני שליחת הבקשה.
  • NETWORK_CODE: קוד הרשת של חשבון Ad Manager 360.
  • CUSTOM_ASSET_KEY (משמש רק לשידורים חיים): מפתח הנכס המותאם אישית שמזהה את אירוע הצגת המודעות ב-Ad Manager 360. אפשר ליצור את זה באמצעות הכלי לשינוי מניפסטים או באמצעות שותף צד שלישי להצגת פודקאסטים.
  • API_KEY (משמש רק לשידורים חיים): מפתח API אופציונלי שיכול להיות נדרש כדי לאחזר מזהה של סטרימינג מ-IMA DAI SDK.

משנים את קטע המשתנים בדוגמה כך שיתאים לערכים הבאים:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl = ""
  static let networkCode = ""
  static let customAssetKey = ""
  static let APIKey = ""
  static let backupStreamURLString = ""

  var adsLoader: IMAAdsLoader?
  ...

יצירת בקשה לשידור פודקאסט בשידור חי או לפי דרישה

הצגת פודקאסטים בשידור חי

משנים את ה-method‏ requestStream כדי ליצור בקשה לשידור פודקאסט בשידור חי על ידי יצירת מופע של IMAPodStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

הצגת פודים של שידורי VOD

משנים את ה-method‏ requestStream כדי ליצור בקשה לשידור של פוד VOD על ידי יצירת מופע של IMAPodVODStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

עריכה והגדרה של כתובת ה-URL של השידור

הצגת פודקאסטים בשידור חי

משנים את השיטות IMAAdsLoaderDelegate באמצעות streamManager.streamId כדי לקבל את מזהה מקור הנתונים. לאחר מכן, מכניסים את מזהה הזרם ל-STREAM_URL, ומחליפים את "[[STREAMID]]". אחרי ביצוע השינוי, אפשר להגדיר את כתובת ה-URL החדשה של השידור באמצעות videoDisplay.loadStream().

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

הצגת פודים של שידורי VOD

משנים את השיטות IMAAdsLoaderDelegate באמצעות streamManager.streamId כדי לקבל את מזהה מקור הנתונים. לאחר מכן, מבקשים כתובת URL של סטרימינג משותף משותף טכנולוגיית הווידאו (VTP) ומתקשרים אל IMAStreamManager.loadThirdPartyStream() כדי שמודול IMA יטען את כתובת ה-URL של הסטרימינג ואת כל הכתוביות שהוחזרו על ידי שותף טכנולוגיית הווידאו.

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

מחיקה של נכסי IMA DAI

אחרי שמסיימים בהצלחה את הבקשה להצגת מודעות בסטרימינג של פודים באמצעות IMA DAI SDK, מומלץ לנקות את כל המשאבים אחרי שמסיימים את הסשן של הצגת הפודים. מתקשרים אל IMAStreamManager.destroy() כדי להפסיק את ההפעלה של הסטרימינג, להפסיק את כל המעקב אחר המודעות ולשחרר את כל נכסי הסטרימינג שנטענו.

דוגמאות נוספות לשימוש ב-tvOS SDK זמינות בדוגמאות ב-GitHub.