大多數 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)
}
...