Bei den meisten Verwendungen des IMA SDKs 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 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 Anzeigenmanagern zu vereinfachen, können Publisher mit dem IMA SDK für iOS beliebige Werte oder Objekte an das Feld UserContext einer Anzeigenanfrage übergeben. Dieser Wert oder dieses Objekt kann dann in der Delegatfunktion AdsLoader:AdsLoadedWithData über das userContext-Attribut 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)
}
...