複数の広告リクエストを処理する

プラットフォームを選択: HTML5 Android iOS tvOS

IMA SDK のほとんどの用途では、一度に 1 つの広告リクエストを管理するだけで済みます。ただし、ユーザーが動画を選択する前に広告データをプリロードするなどのエッジケースの実装では、複数の同時リクエストが必要になる場合があります。広告リクエストは非同期で行われるため、適切な広告マネージャーが正しいコンテキストに関連付けられていることを確認するのは難しい作業のように思えるかもしれません。

複数の広告マネージャーを区別するプロセスを簡素化するため、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)
}

...