Gérer plusieurs demandes d'annonces avec UserContext

La plupart des utilisations du SDK IMA ne nécessitent de gérer qu'une seule demande d'annonce à la fois. Toutefois, dans certains cas particuliers, comme le préchargement des données d'annonces avant que l'utilisateur ne sélectionne une vidéo, il peut être nécessaire d'effectuer plusieurs demandes 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 le processus de différenciation entre plusieurs gestionnaires d'annonces, le SDK IMA pour iOS permet aux éditeurs de transmettre n'importe quelle valeur ou n'importe quel objet dans le champ UserContext de n'importe quelle 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)
}

...