רוב השימושים ב-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)
}
...