Como processar várias solicitações de anúncios com o UserContext

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)
}

...