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

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

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

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

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

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

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

  • StreamRequest: אובייקט שמגדיר בקשה של מקור נתונים לשרתי הפרסום של Google. כדי להפעיל הצגת Pod, צריך ליצור אותו באמצעות IMAPodStreamRequest או IMAPodVODStreamRequest. לשתי ה-methods נדרש קוד רשת, וגם ל-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 יש את ה-codebase שמוזכרים במדריך הזה. מידע נוסף על אופן ההטמעה של IMA DAI SDK זמין במדריך למתחילים.

הגדרת משתני ההצגה של pod

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

הנה קבועי הבקשות של רצף המודעות שיש להוסיף:

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

צריך לשנות את השיטה requestStream כדי ליצור בקשה ל-Podcast בשידור חי על ידי הפעלת 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

צריך לשנות את ה-method requestStream כדי ליצור בקשה ל-VOD ב-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 של השידור

הצגת Pod של שידורים חיים

משנים את ה-methods 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

משנים את ה-methods 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. כדי לראות דוגמאות נוספות של שימוש ב-IMA DAI SDK, חפשו את הדוגמאות ב-GitHub.