A maioria dos usos do SDK do IMA exige apenas o gerenciamento de uma única solicitação de anúncio por vez. No entanto, algumas implementações de caso extremo, como o pré-carregamento de dados de anúncios antes que o usuário selecione um vídeo, podem exigir a realização de várias solicitações simultâneas. Como as solicitações de anúncios são feitas de modo assíncrono, garantir que o gerenciador de anúncios adequado seja associado ao contexto correto pode parecer uma tarefa assustadora.
Para simplificar o processo de diferenciação de vários gerenciadores de anúncios, com o SDK do IMA para tvOS os editores podem transmitir qualquer valor ou objeto para o campo UserContext de qualquer solicitação de anúncio. Esse valor ou objeto pode ser recuperado na função delegada AdsLoader:AdsCarregadoWithData, por meio do atributo userContext do objeto IMAAdsLoadedData.
Exemplo
...
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)
}
...