Gestione di più richieste di annunci con UserContext

La maggior parte degli utilizzi dell'SDK IMA richiede la gestione di una sola richiesta di annunci alla volta. Tuttavia, alcune implementazioni di casi limite, come il precaricamento dei dati pubblicitari prima che l'utente selezioni un video, potrebbero richiedere l'invio di più richieste in parallelo. Poiché le richieste di annunci vengono effettuate in modo asincrono, assicurarsi che l'ad manager corretto sia associato al contesto corretto può sembrare un'impresa ardua.

Per semplificare il processo di differenziazione di più gestori degli annunci, l'SDK IMA per tvOS consente ai publisher di passare qualsiasi valore o oggetto al campo UserContext di qualsiasi richiesta di annuncio. Questo valore o oggetto può quindi essere recuperato nella funzione di delega AdsLoader:AdsLoadedWithData, tramite l'attributo userContext dell'oggetto IMAAdsLoadedData.

Esempio

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

...