UserContext로 여러 광고 요청 처리

대부분의 IMA SDK 사용에서는 한 번에 하나의 광고 요청만 관리해야 합니다. 하지만 사용자가 동영상을 선택하기 전에 광고 데이터를 미리 로드하는 등의 일부 예외적인 사례 구현에서는 동시에 여러 개의 요청을 해야 할 수 있습니다. 광고 요청은 비동기식으로 이루어지기 때문에 적절한 Ad Manager가 올바른 컨텍스트와 연결되도록 하는 일은 버겁게 보일 수 있습니다.

여러 광고 관리자를 구분하는 과정을 단순화하기 위해 tvOS 용 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)
}

...