Hầu hết các trường hợp sử dụng IMA SDK chỉ yêu cầu quản lý một yêu cầu quảng cáo tại một thời điểm. Tuy nhiên, một số trường hợp triển khai đặc biệt (chẳng hạn như tải trước dữ liệu quảng cáo trước khi người dùng chọn một video) có thể yêu cầu bạn đưa ra nhiều yêu cầu đồng thời. Vì các yêu cầu quảng cáo được thực hiện không đồng bộ, nên việc đảm bảo trình quản lý quảng cáo phù hợp được liên kết với đúng bối cảnh có thể là một việc khó khăn.
Để đơn giản hoá quy trình phân biệt nhiều trình quản lý quảng cáo, SDK IMA cho tvOS cho phép nhà xuất bản truyền bất kỳ giá trị hoặc đối tượng nào vào trường UserContext của mọi yêu cầu quảng cáo. Sau đó, bạn có thể truy xuất giá trị hoặc đối tượng này trong hàm uỷ AdsLoader:AdsLoadedWithData, thông qua thuộc tính userContext của đối tượng IMAAdsLoadedData.
Ví dụ:
...
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)
}
...