Większość zastosowań pakietu IMA SDK wymaga zarządzania tylko jednym żądaniem reklamy naraz. Jednak niektóre implementacje przypadków szczególnych, np. w przypadku wczytywania danych reklamy przed wybraniem filmu przez użytkownika, mogą wymagać wysłania wielu żądań jednocześnie. Żądania reklam są wysyłane asynchronicznie, dlatego powiązanie odpowiedniego menedżera reklam z odpowiednim kontekstem może wydawać się trudnym zadaniem.
Aby uprościć proces rozróżniania wielu menedżerów reklam, pakiet IMA SDK na potrzeby tvOS umożliwia wydawcom przekazywanie dowolnej wartości lub obiektu do pola UserContext dowolnego żądania reklamy. Wartość lub obiekt można następnie pobrać w funkcji delegowanej AdsLoader:AdsLoadedWithData, korzystając z atrybutu userContext obiektu IMAAdsLoadedData.
Przykład
...
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)
}
...