Obsługa wielu żądań reklamy w ramach UserContext

Większość zastosowań pakietu IMA SDK wymaga zarządzania tylko jednym żądaniem reklamy naraz. Jednak niektóre implementacje przypadków szczególnych, np. w przypadku wczytywania danych reklamy przed wybraniem filmu przez użytkownika, mogą wymagać wysłania wielu żądań jednocześnie. Żądania reklam są wysyłane asynchronicznie, więc zadbanie o powiązanie odpowiedniego menedżera reklam 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 na iOS umożliwia wydawcom przekazywanie dowolnej wartości lub obiektu do pola UserContext w dowolnym żądaniu reklamy. Tę wartość lub obiekt można potem pobrać za pomocą 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)
}

...