대부분의 IMA SDK 사용에는 한 번에 하나의 광고 요청만 관리하면 됩니다. 하지만 사용자가 동영상을 선택하기 전에 광고 데이터를 미리 로드하는 것과 같은 일부 엣지 케이스 구현에는 여러 동시 요청이 필요할 수 있습니다. 광고 요청은 비동기식으로 이루어지므로 올바른 광고 관리자가 올바른 컨텍스트와 연결되도록 하는 것은 어려운 작업처럼 보일 수 있습니다.
여러 광고 관리자를 구분하는 프로세스를 간소화하기 위해 iOS용 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)
}
...