В большинстве случаев использование 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)
}
...