Nella maggior parte degli utilizzi dell'SDK IMA è necessario gestire una sola richiesta di annuncio alla volta. Tuttavia, alcune implementazioni di casi limite, come il precaricamento dei dati pubblicitari prima che l'utente selezioni un video, possono richiedere più richieste in parallelo. Poiché le richieste di annunci vengono effettuate in modo asincrono, garantire che l'ad Manager appropriato sia associato al contesto corretto può sembrare un'attività scoraggiante.
Per semplificare il processo di differenziazione di più ad manager, l'SDK IMA per tvOS consente ai publisher di trasferire qualsiasi valore o oggetto al campo UserContext di qualsiasi richiesta di annuncio. Questo valore o oggetto può essere recuperato nella funzione di delega AdsLoader:AdsLoadedWithData tramite l'attributo userContext dell'oggetto IMAAdsLoadedData.
Esempio
...
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)
}
...