处理多个广告请求

选择平台HTML5 Android iOS tvOS

在大多数情况下,使用 IMA SDK 时只需一次管理一个广告请求。不过,在某些极端情况下(例如在用户选择视频之前预加载广告数据),可能需要同时发出多个请求。由于广告请求是异步发出的,因此确保将正确的广告管理器与正确的上下文相关联可能是一项艰巨的任务。

为了简化区分多个广告管理器的过程,IMA SDK for tvOS 允许发布商将任何值或对象传递给任何广告请求的 UserContext 字段。然后,可以通过 IMAAdsLoadedData 对象的 userContext 属性在 AdsLoader:AdsLoadedWithData 委托函数中检索此值或对象。

示例

...
  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)
}

...