La plupart des utilisations du SDK IMA ne nécessitent que la gestion d'une seule demande d'annonce à la fois. Toutefois, certaines implémentations de cas particuliers, comme le préchargement des données publicitaires avant que l'utilisateur ne sélectionne une vidéo, peuvent nécessiter d'envoyer plusieurs requêtes simultanées. Étant donné que les demandes d'annonces sont envoyées de manière asynchrone, s'assurer que le bon gestionnaire d'annonces est associé au bon contexte peut sembler une tâche ardue.
Pour simplifier la différenciation de plusieurs gestionnaires d'annonces, le SDK IMA pour tvOS permet aux éditeurs de transmettre n'importe quelle valeur ou n'importe quel objet au champ UserContext de toute demande d'annonce. Cette valeur ou cet objet peut ensuite être récupéré dans la fonction déléguée AdsLoader:AdsLoadedWithData, via l'attribut userContext de l'objet IMAAdsLoadedData.
Exemple
...
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)
}
...