IMA Android SDK は、完全に自動化された広告プレイリストをサポートしています。この機能は、広告の入稿時に Google アド マネージャーで指定されているとおりに広告ブレークをコンテンツに挿入します。また、プレロール、ミッドロール、ポストロールなど、広告ブレークのサポートに必要な動画プレーヤーのコードを大幅に簡素化できます。
- アド マネージャーで広告を入稿する際は、「コンテンツの開始時に必ず広告ブレークを再生する」や「コンテンツ 30 分ごとに 1 分の広告ブレークを再生する」など、さまざまな広告ルールを指定できます。
- 広告がリクエストされると、広告サーバーは広告の再生リストを返すことができます。SDK は再生リストを処理し、指定された広告ブレークを自動的にスケジュールします。
- Android は、広告とコンテンツの再生の両方に同じ動画プレーヤーを使用するため、広告ルールを実装する場合は、広告の開始時にコンテンツのプレイヘッドの位置を保存し、広告の終了位置に移動する必要があります。
動画プレーヤーに
VideoAdPlayer
インターフェースを実装してください。これにより、アド マネージャーで指定されたタイミングで広告ブレークが自動的に挿入されます。private boolean playingContent = true; private int contentPosition = -1; private List
callbacks = new ArrayList (); @Override public void addCallback(VideoAdPlayerCallback callback) { callbacks.add(callback); } @Override public void removeCallback(VideoAdPlayerCallback callback) { callbacks.remove(callback); } public void loadContent() playingContent = true; load(CONTENT_URL); } @Override public void loadAd(String mediaUrl) { playingContent = false; load(mediaUrl); } public void pauseContent() { savePosition(); pause(); } @Override public void pauseAd() { pause(); } private void pause() { myVideoView.pause(); for (VideoAdPlayerCallback callback : callbacks) { callback.onPause(); } } public void resumeContent() { loadContent(); if (contentPosition > 0) { restorePosition(); } resume(); } @Override public void resumeAd() { resume(); } private void resume() { myVideoView.start(); for (VideoAdPlayerCallback callback : callbacks) { callback.onResume(); } } public void savePosition() { contentPosition = myVideoView.getCurrentPosition(); } public void restorePosition() { myVideoView.seekTo(contentPosition); } CONTENT_PAUSE_REQUESTED
イベントとCONTENT_RESUME_REQUESTED
イベントは、広告ブレークが再生されたときにコンテンツを一時停止して再開するために使用されます。これらのイベントの詳細については、関連する API ドキュメントをご覧ください。
注: コンテンツの再生が終了した場合や、ユーザーが再生を停止した場合は、必ず AdsLoader.contentComplete を呼び出して、コンテンツの作成が完了したことを SDK に通知してください。SDK はポストロール広告ブレークのスケジュールを設定します(スケジュールされている場合)。ALL_ADS_COMPLETED
イベントは、すべての広告ブレークが再生されると発生します。また、コンテンツのトラッキングは init()
が呼び出されたときに開始されるため、コンテンツを再生する前に init()
を呼び出す必要があります。