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