W większości przypadków użycia pakietu IMA SDK wystarczy zarządzać 1 żądaniem reklamy naraz. Jednak w niektórych przypadkach, np. podczas wstępnego wczytywania danych reklam, zanim użytkownik wybierze film, może być konieczne wysłanie kilku żądań jednocześnie. Ponieważ żądania reklamy są wysyłane asynchronicznie, zapewnienie, że odpowiedni menedżer reklam jest powiązany z właściwym kontekstem, może się wydawać trudne.
Aby uprościć proces rozróżniania wielu menedżerów reklam, pakiet IMA SDK dla tvOS umożliwia wydawcom przekazywanie dowolnej wartości lub obiektu do pola UserContext w dowolnym żądaniu reklamy. Tę wartość lub obiekt można następnie pobrać w funkcji delegata AdsLoader:AdsLoadedWithData za pomocą 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)
}
...