הגדרת IMA SDK ל-DAI

בחירת פלטפורמה: HTML5 Android iOS tvOS Cast Roku

ערכות IMA SDK מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות. ‫IMA SDK יכול לשלוח בקשות למודעות מכל שרת מודעות שתואם ל-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 ואילך.
  • שיטה להתקנת IMA SDK:
  • אפליקציית tvOS שכבר הוגדרה עם IMA DAI SDK להפעלת סטרימינג של וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש בסיס קוד שמופיע במדריך הזה. מידע נוסף על הטמעה של IMA DAI SDK זמין במדריך למתחילים.

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

מבצעים את כל השינויים ב-Pod Serving ב-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. אפשר ליצור את הקובץ הזה באמצעות כלי לשינוי מניפסט או שותף צד שלישי של Pod Serving.
  • 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.