使用 UserContext 處理多個廣告請求

大多數 IMA SDK 用途只需要一次管理單一廣告請求。不過,某些極端情況的實作方式 (例如在使用者選取影片前預先載入廣告資料) 可能需要同時提出多項要求。由於廣告請求是非同步的,因此要確保廣告管理系統搭配正確的背景運作,是一項艱鉅的任務。

為簡化區分多個廣告管理員的程序,iOS 版 IMA SDK 允許發布商將任何值或物件傳遞至任何廣告請求的 UserContext 欄位。接著,您可以透過 IMAAdsLoadedData 物件的 userContext 屬性,在 AdsLoader:AdsLoadedWithData 委派函式中擷取這個值或物件。

範例

...
  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)
}

...