Mehrere Anzeigenanfragen mit UserContext verarbeiten

In den meisten Fällen muss nur eine einzige Anzeigenanfrage gleichzeitig verwaltet werden. Bei Grenzfallimplementierungen wie dem Vorabladen von Anzeigendaten, bevor der Nutzer ein Video auswählt, können jedoch mehrere Anfragen gleichzeitig erforderlich sein. Da Anzeigenanfragen asynchron erfolgen, kann es eine schwierige Aufgabe sein, sicherzustellen, dass der richtige Ad Manager mit dem richtigen Kontext verknüpft wird.

Um die Unterscheidung mehrerer Ad Manager zu vereinfachen, ermöglicht das IMA SDK für tvOS es Publishern, beliebige Werte oder Objekte an das Feld UserContext einer Anzeigenanfrage zu übergeben. Dieser Wert oder dieses Objekt kann dann in der Delegate-Funktion AdsLoader:AdsLoadedWithData über das Attribut userContext des IMAAdsLoadedData-Objekts abgerufen werden.

Beispiel

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

...