リニア ディスプレイ広告を有効にする

IMA SDK for HTML5 では、リニア動画広告に加えて、リニア ディスプレイ広告もサポートされています。リニア動画広告の詳細については、動画ソリューション広告の概要をご覧ください。

リニア ディスプレイ広告を有効にすると、リニア ディスプレイ広告がリニア動画広告と広告スペースを競合するため、広告スペースの広告デマンドが増加する可能性があります。IMA はリニア ディスプレイ広告のレンダリングを処理しますが、動画コンテンツの検出を設定する必要があります。IMA コンテンツ検出の実装は、コンテンツ プレーヤーを広告プレーヤーと同じオリジン フレームに作成するか、広告プレーヤーをクロスオリジン フレームに作成するかによって異なります。

このガイドでは、リニア ディスプレイ広告を有効にするためのコンテンツ検出の設定、コンテンツ動画プレーヤーの変更、コンテンツ シグナルの収集の停止について説明します。

コンテンツ検出を設定する

広告リクエストでリニア ディスプレイ広告を有効にする手順は次のとおりです。

同一オリジン

IMA SDK がコンテンツ プレーヤーと同じオリジンを共有している場合は、次のいずれかを行います。

  • 推奨: 動画プレーヤーを AdsManagerLoadedEvent.getAdsManager() 呼び出しに渡します。getAdsManager() では currentTime プロパティを含むオブジェクトを渡すことができますが、コンテンツ検出をサポートするには、HTMLVideoElement インスタンスを getAdsManager() に渡す必要があります。

    function onAdsManagerLoaded(adsManagerLoadedEvent) {
      // Set any AdsRenderingSettings here.
      const adsRenderingSettings = new google.ima.AdsRenderingSettings();
    
      // Get the ads manager.
      adsManager =
        adsManagerLoadedEvent.getAdsManager(videoElement, adsRenderingSettings);
    }
    
  • AdsManagerLoadedEvent.getAdsManager() の呼び出し中にコンテンツ プレーヤーを提供できない場合は、動画プレーヤーで AdsManager.configureAdsManager() メソッドを呼び出します。コンテンツ検出が機能するには、HTMLVideoElement である必要があります。

function onAdsManagerLoaded(adsManagerLoadedEvent) {
  adsManager =
    adsManagerLoadedEvent.getAdsManager(null);
  adsManager.configureAdsManager(videoElement);
}

コンテンツ検出を設定しないと、Google 広告サーバーがリニア ディスプレイ広告の配信を停止する可能性があります。

コンテンツ プレーヤーが IMA SDK を読み込むのと同じオリジンにある場合、コンテンツ プレーヤーの変更やコンテンツ シグナルの収集の停止を処理するために IMA の実装を変更する必要はありません。

クロスオリジン

IMA SDK がコンテンツ プレーヤーに対してクロスオリジンである場合、IMA は CrossOriginProxy クラスを介してコンテンツ検出シグナルを収集できます。このクラスを使用すると、IMA SDK でリニア ディスプレイ広告のプレースメントが正しいことを確認し、動画コンテンツのテーマに関連するシグナルを収集できます。IMA SDK をクロスドメイン iframe に配置する場合は、CrossOriginProxy クラスを実装する必要があります。

CrossOriginProxy クラスを実装せずに、コンテンツ プレーヤーを IMA SDK とクロスオリジンに配置し続けると、Google 広告サーバーがリニア ディスプレイ広告の配信を停止する可能性があります。

CrossOriginProxy クラスをアプリに読み込む手順は次のとおりです。

  1. HTML ファイルに ima_proxy.js ファイルをインポートします。

    <html>
      <head>
        <title>IMA HTML5 cross-origin iframe sample</title>
        <link rel="stylesheet" href="style.css">
      </head>
    
      <body>
        <div id="mainContainer">
          <div id="content">
            <video id="contentElement">
              <source src="https://storage.googleapis.com/gvabox/media/samples/stock.mp4"></source>
            </video>
          </div>
    
          <!-- The cross-origin iframe where you load IMA SDK and play ads. -->
          <iframe id="adContainerIframe"
                  src="https://cross-origin-domain.com/ads-sandbox.html" >
          </iframe>
    
        </div>
        <button id="playButton">Play</button>
    
        <script src="//imasdk.googleapis.com/js/sdkloader/ima_proxy.js"></script>
        <script src="main.js"></script>
      </body>
    </html>
    
  2. main.js ファイルで、CrossOriginProxy インスタンスを取得します。

  3. ページまたはアプリで広告を表示するすべての動画プレーヤーの配列を指定して、setVideoElements() メソッドを呼び出します。

広告リクエストを行う前に、setVideoElements() 呼び出しで動画要素を CrossOriginProxy インスタンスに渡す必要があります。次の例では、1 つのコンテンツ動画プレーヤーを含む配列を渡しています。

// On window load attach an event to the play button click
// that triggers playback of the content video element.
window.addEventListener('load', function(event) {
videoContent = document.getElementById('contentElement');
ima.crossOriginProxy.getInstance().setVideoElements([videoContent]);
playButton = document.getElementById('playButton');
playButton.addEventListener('click', playAds);
});

コンテンツ動画プレーヤーを変更する

別のコンテンツ動画プレーヤーに変更または追加する場合は、新しい配列を setVideoElements() メソッドに渡す必要があります。新しい setVideoElements() 呼び出しを行うと、IMA は新しいコンテンツ プレーヤーのシグナルの収集を開始し、以前の呼び出しで渡されたコンテンツ プレーヤーのシグナルの収集を停止します。

次の例では、新しい動画要素を CrossOriginProxy クラスに渡しています。

function createNewContentPlayer(newPlayerId) {
newVideoContent = document.getElementById(newPlayerId);
ima.crossOriginProxy.getInstance().setVideoElements([newVideoContent]);

// Continue with any other steps needed to initiate the content player
}

広告が完了したらシグナルの収集を停止する

広告の再生を終了して AdsLoader.destroy() メソッドを呼び出す場合は、空の配列を指定して setVideoElements() メソッドも呼び出す必要があります。空の配列を指定して setVideoElements() を呼び出すと、IMA が保持しているコンテンツ プレーヤーへの参照が削除され、メモリリークの問題が回避されます。