טיפול בבקשות מרובות למודעות באמצעות UserContext

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

כדי לפשט את תהליך ההבחנה בין כמה מנהלי מודעות, IMA SDK של tvOS מאפשר לבעלי תוכן דיגיטלי להעביר כל ערך או אובייקט לשדה UserContext של כל בקשה להצגת מודעה. לאחר מכן ניתן לאחזר את הערך או האובייקט הזה מתוך פונקציית ההאצלה AdsLoader:AdsLoadedWithData, דרך המאפיין userContext של האובייקט IMAAdsLoadedData.

דוגמה

...
  adsLoader = IMAAdsLoader(settings: nil)
  adsLoader.delegate = self

  let userContextA = {id: "Request A", element: videoElementA}
  let userContextB = {id: "Request B", element: videoElementB}
  let requestA = IMAAdsRequest(
        adTagUrl: ViewController.AdTagURLString,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: userContextA)
  let requestB = IMAAdsRequest(
        adTagUrl: ViewController.AdTagURLString,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: userContextB)
  adsLoader.requestAds(with: requestA)
  adsLoader.requestAds(with: requestB)

...

// MARK: - IMAAdsLoaderDelegate

func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
  let userContext = adsLoadedData.userContext
  print("Loaded ads for ID: " + userContext.id)
  adsManager = adsLoadedData.adsManager
  adsManager.initialize(with: nil)
}

func adsLoader(_ loader: IMAAdsLoader!, failedWith adErrorData: IMAAdLoadingErrorData!) {
  let userContext = adsLoadingErrorData.userContext
  print("Error loading ads for ID: " + userContext.id)
}

...