在大多数情况下,使用 IMA SDK 时只需一次管理一个广告请求。不过,对于某些极端情况的实现(例如在用户选择视频之前预加载广告数据),可能需要发出多个并发请求。由于广告请求是异步进行的,因此确保将适当的广告管理器与正确的上下文相关联似乎是一项艰巨的任务。
为了简化区分多个广告管理平台的流程,适用于 tvOS 的 IMA SDK 允许发布商向任何广告请求的 UserContext 字段传入任何值或对象。然后,您可以在 AdsLoader:AdsLoadedWithData 委托函数中通过 IMAAdsLoadedData 对象的 userContext 属性检索此值或对象。
示例
...
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)
}
...