הגדרת IMA SDK ל-DAI

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

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

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

הצגת מודעות דינמיות (DAI) בפודקאסטים

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

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

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

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

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

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

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

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

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

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

מוסיפים את הקבועים הבאים של בקשות לסטרימינג של רצפי מודעות:

  • ‫STREAM_URL (משמש רק לשידורים חיים): כתובת ה-URL של שידור הווידאו שסופקה על ידי הכלי לשינוי מניפסטים או על ידי שותף צד שלישי באמצעות Pod Serving. הוא צריך לדרוש ממך להוסיף את מזהה הסטרימינג שסופק על ידי 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?
  ...

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

הצגת מודעות בשידור חי

כדי ליצור בקשה לשידור פודקאסט בשידור חי, משנים את ה-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)
  }

  ...

הצגת תוכן ב-Pod של שידור VOD

כדי ליצור בקשה להפעלת סטרימינג של פוד VOD, צריך לשנות את ה-method‏ requestStream על ידי יצירת מופע של 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 כדי לקבל את מזהה מקור הנתונים. לאחר מכן, מכניסים את מזהה המקור לנתונים במקום "[[STREAMID]]" ב-STREAM_URL. אחרי שמבצעים את השינוי הזה, מגדירים את כתובת ה-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
  }

  ...

הצגת תוכן ב-Pod של שידור 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

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

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