Obsługa wielu żądań reklam za pomocą UserContext

Większość przypadków użycia pakietu IMA SDK wymaga tylko zarządzania jednym żądaniem reklamy naraz. Jednak niektóre implementacje skrajne, takie jak wstępne wczytywanie danych reklam przed wybraniem filmu przez użytkownika, mogą wymagać wysyłania wielu żądań równoczesnych. Żądania reklamy są przesyłane asynchronicznie, więc dopilnowanie, aby odpowiedni menedżer reklam był powiązany z właściwym kontekstem, może wydawać się trudnym zadaniem.

Aby uprościć proces rozróżniania wielu menedżerów reklam, pakiet IMA SDK for 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 delegowania 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)
}

...