Bei den meisten Anwendungen des IMA SDK muss jeweils nur eine Anzeigenanfrage verwaltet werden. Bei einigen Sonderfällen, z. B. beim Vorabladen von Anzeigendaten, bevor der Nutzer ein Video auswählt, sind jedoch möglicherweise mehrere gleichzeitige Anfragen erforderlich. Da Anzeigenanfragen asynchron gestellt werden, kann es schwierig sein, den richtigen Ad Manager dem richtigen Kontext zuzuordnen.
Um die Unterscheidung mehrerer Ad Manager zu vereinfachen, können Publisher mit dem IMA SDK für tvOS einen beliebigen Wert oder ein beliebiges Objekt an das Feld UserContext einer Anzeigenanfrage übergeben. Dieser Wert oder dieses Objekt kann dann in der Delegatenfunktion AdsLoader:AdsLoadedWithData über das Attribut userContext des Objekts IMAAdsLoadedData 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)
}
...