Bei den meisten Verwendungen des IMA SDKs muss jeweils nur eine einzelne 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 gesendet werden, kann es schwierig sein, dafür zu sorgen, dass der richtige Ad Manager dem richtigen Kontext zugeordnet ist.
Um die Unterscheidung zwischen mehreren Ad Manager-Konten zu vereinfachen, können Publisher mit dem IMA SDK für tvOS beliebige Werte oder Objekte an das Feld UserContext einer Anzeigenanfrage übergeben. Dieser Wert oder dieses Objekt kann dann in der delegierten Funktion 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)
}
...