תחילת העבודה עם IMA DAI SDK

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

בחירת פתרון ה-DAI הרצוי

הצגת מודעות דינמיות (DAI) ב-Pod

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

סקירה כללית בנושא הצגת מודעות Pod של IMA DAI

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

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

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

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

לפני שמתחילים, צריך את הדברים הבאים:

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

הגדרת משתני הצגת ה-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 =
    "https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
  static let networkCode = "51636543"
  static let customAssetKey = "google-sample"
  static let APIKey = ""
  static let backupStreamURLString =
    "http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"

  var adsLoader: IMAAdsLoader?
  ...

יצירת בקשה לשידור חי או ל-Pod של VOD

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

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

משנים את השיטה requestStream כדי ליצור בקשה של VOD Pod Stream על ידי יצירה של 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
  }

  ...

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

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

  ...

  // 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
  }

זהו! עכשיו אתה מבקש ומציג מודעות בזרם הצגת Pod עם IMA DAI SDK ל-iOS. בדוגמאות ב-GitHub תוכלו למצוא דוגמאות נוספות לשימוש ב-IMA DAI SDK.