IMA SDK のほとんどの用途では、一度に管理する広告リクエストは 1 つだけです。ただし、ユーザーが動画を選択する前に広告データをプリロードするなど、一部のエッジケースの実装では、複数の同時リクエストが必要になる場合があります。広告リクエストは非同期で行われるため、適切なアド マネージャーが適切なコンテキストに関連付けられていることを確認するのは困難に思えるかもしれません。
複数のアド マネージャーを区別するプロセスを簡素化するため、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)
}
...