고급 연동(InStream API)
InStream API는 인스트림 광고의 로드와 재생을 설정·관리하는 고급 API입니다. 모든 유형의 광고 브레이크 재생과 자체 플레이어 구현을 지원합니다. 인스트림 광고는 자동·수동으로 재생되는 동영상 광고로 구성됩니다.
Pre-roll, Mid-roll, Post-roll 브레이크는 InstreamAdBinder API로 자동 재생됩니다. In-roll과 Pause-roll 브레이크는 수동으로 재생하며, 각각 In-roll API와 Pause-roll API를 사용합니다.
Примечание
InstreamAdBinder API와 In-roll API, Pause-roll API를 동시에 쓸 수도 있습니다. 단, 다음을 지키세요.
- 광고 플레이어는 서로 다른 인스턴스를 사용합니다.
- 메인 동영상이 InStreamAdBinder API로 일시 정지된 경우에는 Pause-roll 및 In-roll API로 광고 재생을 시작하지 마세요.
동작 방식
로드된 인스트림 광고 객체에는 광고 브레이크 재생 일정이 들어 있습니다. 각 브레이크는 InstreamAdBreak 객체로 설명됩니다. 브레이크 유형은 Pre/Mid/Post/In/Pause-Roll 중 하나일 수 있습니다. Pre/Mid/Post-Roll 브레이크는 InstreamAdBinder API로 재생할 수 있습니다. In/Pause-Roll 브레이크는 각각 In-roll API와 Pause-roll API로 재생합니다.
VideoPlayer 인터페이스는 메인 동영상 콘텐츠와 상호작용하는 데 쓰입니다. 광고 게재 위치 안에서 광고 브레이크를 재생하려면 InstreamAdPlayer 인터페이스를 사용합니다.
InstreamAdBinder는 메인 동영상 재생 진행을 추적하고, Yandex Advertising Network 인터페이스의 동영상 리소스 설정에 따라 광고 브레이크를 표시합니다.
InstreamAdBinder는 PlayerView에서 동영상 광고 렌더링을 직접 제어하지 않습니다. 동영상 광고는 InstreamAdBinder로 전달되는 플레이어 인터페이스 신호를 바탕으로 앱 쪽에서 재생해야 합니다. InstreamAdBinder는 광고 브레이크 재생 시작 시 VideoPlayer.pauseVideo()를, 종료 시 VideoPlayer.resumeVideo()를 호출해 알립니다.
앱에서 VideoPlayer.pauseVideo()가 호출되면 메인 동영상 컨트롤을 숨기고 메인 동영상을 일시 정지한 뒤 동영상 광고 재생을 시작해야 합니다. 광고 SDK 쪽에서는 메서드 호출 후 InstreamAdView 컨테이너 안에 광고 컨트롤을 표시하고 InstreamAdPlayer.playAd()를 호출해 동영상 광고 재생을 시작합니다.
앱에서 VideoPlayer.resumeVideo()가 호출되면 메인 동영상 컨트롤을 다시 보이게 하고 메인 동영상 재생을 재개해야 합니다. 광고 SDK 쪽에서는 메서드 호출 전에 InstreamAdView 안의 광고 컨트롤을 제거합니다.
In/Pause-Roll API는 PlayerView에서 동영상 광고 렌더링을 직접 제어하지 않습니다. 동영상 광고는 In/Pause-Roll로 전달되는 플레이어 인터페이스 신호를 바탕으로 앱 쪽에서 재생해야 합니다. In/Pause-Roll은 브레이크 재생 시작 시 InstreamAdBreakEventListener.onInstreamAdBreakStarted()를, 종료 시 InstreamAdBreakEventListener.onInstreamAdBreakCompleted() 또는 InstreamAdBreakEventListener.onInstreamAdBreakError()를 호출해 알립니다.
앱에서 InstreamAdBreakEventListener.onInstreamAdBreakStarted()가 호출되면 메인 동영상 컨트롤을 숨기고 메인 동영상을 일시 정지해야 합니다. 광고 SDK 쪽에서는 메서드 호출 후 InstreamAdView 안에 광고 컨트롤을 표시하고 InstreamAdPlayer.playAd()를 호출해 동영상 광고 재생을 시작합니다.
앱에서 InstreamAdBreakEventListener.onInstreamAdBreakCompleted() 또는 InstreamAdBreakEventListener.onInstreamAdBreakError()가 호출되면 메인 동영상 컨트롤을 되돌리고 메인 동영상 재생을 재개합니다. 광고 SDK 쪽에서는 해당 메서드 호출 전에 InstreamAdView에서 광고 컨트롤을 제거합니다.
광고 로드
-
인스트림 광고를 받으려면
InstreamAdLoader클래스의 인스턴스를 만듭니다. -
알림 설정(광고 로드 성공 또는 오류로 실패):
InstreamAdLoadListener인스턴스를 만들어 광고 로더의 이벤트 리스너로 설정합니다. -
InstreamAdRequestConfiguration.Builder클래스로instreamAdRequestConfiguration요청 구성을 만듭니다. 요청 매개변수로 Yandex Advertising Network 인터페이스의PAGE_ID를 넘깁니다. -
InstreamAdLoader.loadInstreamAd메서드로 광고를 로드하고Context와instreamAdRequestConfiguration을 전달합니다.
코드 예시:
연동을 테스트하려면 데모 PAGE_ID demo-instream-vmap-yandex를 사용하세요.
val instreamAdLoader = InstreamAdLoader(this)
instreamAdLoader.setInstreamAdLoadListener(object : InstreamAdLoadListener {
override fun onInstreamAdLoaded(instreamAd: InstreamAd) {
// ...
}
override fun onInstreamAdFailedToLoad(reason: String) {
// ...
}
})
val instreamAdRequestConfiguration = InstreamAdRequestConfiguration.Builder(PAGE_ID).build()
instreamAdLoader.loadInstreamAd(this, instreamAdRequestConfiguration)
final InstreamAdLoader instreamAdLoader = new InstreamAdLoader(context);
instreamAdLoader.setInstreamAdLoadListener(new InstreamAdLoadListener() {
@override
public void onInstreamAdLoaded(@NonNull final InstreamAd instreamAd) {
// ...
}
@override
public void onInstreamAdFailedToLoad(@NonNull final String reason) {
// ...
}
});
final InstreamAdRequestConfiguration instreamAdRequestConfiguration =
new InstreamAdRequestConfiguration.Builder(PAGE_ID).build();
instreamAdLoader.loadInstreamAd(this, instreamAdRequestConfiguration);
광고 렌더링
-
InstreamAdPlayer와VideoPlayer인터페이스를 구현합니다.메서드 사용·구현에 대한 자세한 내용은 레퍼런스의
Package com.yandex.mobile.ads.instream.player.ad및Package com.yandex.mobile.ads.instream.player.content를 참고하세요. 테스트 구현 예제도 함께 확인하세요.Совет
구현을 쉽게 하려면 동영상 광고와 콘텐츠 재생에 서로 다른 플레이어 인스턴스를 사용하는 것을 권장합니다.
-
앱 레이아웃에 InstreamAdView를 추가합니다. 동영상 광고를 재생하려면 InstreamAdView 안에 PlayerView가 있어야 합니다.
코드 예시:
제한 사항
컨테이너 크기는 최소 300dp × 160dp여야 합니다.
<com.yandex.mobile.ads.instream.player.ad.InstreamAdView android:id="@+id/instream_ad_view" android:layout_width="match_parent" android:layout_height="wrap_content"> <PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </com.yandex.mobile.ads.instream.player.ad.InstreamAdView> -
InstreamAdBinder객체를 만듭니다. 빌더에 Context, 로드된InstreamAd객체,InstreamAdPlayer와VideoPlayer구현을 넘깁니다.재생 진행 알림(동영상 광고 재생 준비, 재생 완료 또는 실패)을 설정하려면
InstreamAdListener인스턴스를 만들어InstreamAdBinder의 이벤트 리스너로 설정합니다.KotlinJavainstreamAdBinder = InstreamAdBinder( this, instreamAd, checkNotNull(instreamAdPlayer), checkNotNull(contentVideoPlayer) ) instreamAdBinder.setInstreamAdListener(...)mInstreamAdBinder = new InstreamAdBinder(context, mInstreamAd, mYandexAdPlayer, mContentVideoPlayer); mInstreamAdBinder.setInstreamAdListener(...); -
Pre-roll 브레이크를 더 빨리 재생하려면 미리
InstreamAdBinder.prepareAd()를 호출해 준비합니다.KotlinJavaprivate fun preparePrerollAd(instreamAdBinder: InstreamAdBinder) { instreamAdBinder.setInstreamAdListener(object : InstreamAdListener { // ... override fun onInstreamAdPrepared() { addInstreamAdBinderToPreloadedAdQueue(instreamAdBinder) } // ... }) instreamAdBinder.prepareAd() }private void preparePrerollAd(@NonNull final InstreamAdBinder instreamAdBinder) { instreamAdBinder.setInstreamAdListener(new InstreamAdListener() { // ... public void onInstreamAdPrepared() { addInstreamAdBinderToPreloadedAdQueue(instreamAdBinder); } // ... }); instreamAdBinder.prepareAd(); } -
만든
InstreamAdBinder에 대해InstreamAdBinder.bind(instreamAdView)를 호출합니다. 인자로InstreamAdView를 넘깁니다. 이후 인스트림 SDK가 메인 동영상 재생 진행을 자동으로 추적하고 동영상 광고 재생 방식을 관리합니다.KotlinJavainstreamAdBinder.bind(instreamAdView)mInstreamAdBinder.bind(mInstreamAdView); -
목록에서 인스트림 광고를 재생할 때, 목록에서 광고가 있는 셀이 무효화되면
InStreamBinder.unbind()를 호출합니다. 스크롤 시 플레이어를 재사용하는 풀을 쓰려면InstreamAdBinder에 연결된 광고 플레이어를 다시 쓸 때InstreamAdbinder.invalidateAdPlayer()를, 메인 콘텐츠 플레이어를 다시 쓸 때InstreamAdBinder.invalidateVideoPlayer()를 호출합니다. -
InStreamAdBinder사용을 중지할 때는 상태를 초기화합니다.KotlinJavaoverride fun onDestroy() { instreamAdBinder.apply { unbind() instreamAdBinder.invalidateVideoPlayer() instreamAdBinder.invalidateAdPlayer() instreamAdBinder.setInstreamAdListener(null) instreamAdBinder.setVideoAdPlaybackListener(null) } super.onDestroy() }public void onDestroy() { instreamAdBinder.unbind(); instreamAdBinder.invalidateVideoPlayer(); instreamAdBinder.invalidateAdPlayer(); instreamAdBinder.setInstreamAdListener(null); instreamAdBinder.setVideoAdPlaybackListener(null); super.onDestroy(); }
Примечание
Pause-roll 브레이크 재생 설정은 In-roll과 유사합니다. In-roll 클래스·메서드를 Pause-roll에 해당하는 것으로 바꾸면 됩니다.
-
InstreamAdPlayer인터페이스를 구현합니다.메서드와 구현에 대한 자세한 내용은 레퍼런스의
Package com.yandex.mobile.ads.instream.player.ad를 참고하세요. 테스트 구현 예제도 함께 확인하세요.Совет
구현을 쉽게 하려면 동영상 광고와 콘텐츠 재생에 서로 다른 플레이어 인스턴스를 사용하는 것을 권장합니다.
-
앱 레이아웃에 InstreamAdView를 추가합니다. 동영상 광고를 재생하려면 InstreamAdView 안에 PlayerView가 있어야 합니다.
코드 예시:
제한 사항
컨테이너 크기는 최소 300dp × 160dp여야 합니다.
<com.yandex.mobile.ads.instream.player.ad.InstreamAdView android:id="@+id/instream_ad_view" android:layout_width="match_parent" android:layout_height="wrap_content"> <PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </com.yandex.mobile.ads.instream.player.ad.InstreamAdView> -
InstreamAdLoader로 Yandex Advertising Network 인터페이스의PAGE_ID를 사용해InstreamAd객체를 로드합니다. -
InstreamAd객체에는 여러 유형의 광고 브레이크 집합이 들어 있습니다. In-roll 브레이크를 얻으려면InrollQueueProvider를 사용합니다.InrollQueueProvider큐는 표시 순서대로 In-roll 객체를 받을 수 있게 합니다.KotlinJavafun onInstreamAdLoaded(instreamAd: InstreamAd) { val inrollQueueProvider = InrollQueueProvider(context, instreamAd) instreamAdBreakQueue = inrollQueueProvider.queue }public void onInstreamAdLoaded(@NonNull final InstreamAd instreamAd) { final InrollQueueProvider inrollQueueProvider = new InrollQueueProvider(context, instreamAd); mInstreamAdBreakQueue = inrollQueueProvider.getQueue(); } -
받은 In-roll 동영상 광고를 재생하려면 먼저 준비해야 합니다. 준비되지 않은 In-roll 동영상 광고는 시작되지 않습니다.
In-roll 동영상 광고를 준비하려면
Inroll.prepare(instreamAdPlayer)인터페이스를 호출하고 생성한InstreamAdPlayer구현 인스턴스를 넘깁니다. 광고 브레이크 상태를 추적하려면InstreamAdBreakEventListener를 설정합니다.KotlinJavafun prepare(instreamAdPlayer: SampleInstreamAdPlayer) { currentInroll = instreamAdBreakQueue.poll()?.apply { setListener(InrollListener()) instreamAdPlayer.let(::prepare) } }public void prepare(instreamAdPlayer) { currentInroll = mInstreamAdBreakQueue.poll(); currentInroll.setListener(new InrollListener()); currentInroll.prepare(instreamAdPlayer); } -
In-roll 동영상 광고가 준비되면
InstreamAdBreakEventListener.onInstreamAdBreakPrepared()가 호출됩니다. 준비된 In-roll 동영상 광고는 재생할 수 있는 상태입니다.Совет
InstreamAdBreakQueue에서 받은 순서대로 동영상 광고를 재생하세요. 받은 In-roll 동영상 광고를 다른 순서로 재생하면 앱 수익화에 불리할 수 있습니다. -
준비된 In-roll 동영상 광고를 재생하려면
Inroll.play()를 호출하고 인자로InstreamAdView를 넘깁니다.KotlinJavafun onInstreamAdBreakPrepared() { currentInroll?.play(instreamAdView) }public void onInstreamAdBreakPrepared() { if (currentInroll != null) { currentInroll.play(instreamAdView); } } -
광고 브레이크 재생이 시작되면
InstreamAdBreakEventListener.onInstreamAdBreakStarted()가 호출됩니다. 이 메서드 호출 후에는 메인 동영상을 일시 정지하고 컨트롤을 숨깁니다.KotlinJavafun onInstreamAdBreakStarted() { contentVideoPlayer?.pauseVideo() }public void onInstreamAdBreakStarted() { if (contentVideoPlayer != null) { contentVideoPlayer.pauseVideo(); } } -
브레이크 재생이 끝나면 메인 동영상 재생을 재개합니다. 동영상 광고는 성공하거나 실패할 수 있으며, 두 경우 모두 처리해야 합니다.
KotlinJavaoverride fun onInstreamAdBreakCompleted() { handleAdBreakCompleted() } override fun onInstreamAdBreakError(reason: String) { handleAdBreakCompleted() } private fun handleAdBreakCompleted() { currentInroll = null contentVideoPlayer?.resumeVideo() }@Override public void onInstreamAdBreakCompleted() { handleAdBreakCompleted(); } @Override public void onInstreamAdBreakError(@NonNull final String reason) { handleAdBreakCompleted(); } private void handleAdBreakCompleted() { currentInroll = null; if (contentVideoPlayer != null) { contentVideoPlayer.resumeVideo(); } } -
현재 In-roll 동영상 광고 재생이 끝나면
InstreamAdBreakQueue에서 다음 In-roll 동영상 광고가 있는지 확인합니다.KotlinJavafun prepareNextAd() { currentInroll = mInstreamAdBreakQueue.poll() currentInroll?.prepareInroll(currentInroll) }public void prepareNextAd() { currentInroll = mInstreamAdBreakQueue.poll(); if (currentInroll != null) { prepareInroll(currentInroll); } } -
In-roll 동영상 광고 사용을 중지할 때는 상태를 초기화합니다.
KotlinJavaoverride fun onDestroy() { currentInroll?.apply { invalidate() setListener(null) } super.onDestroy() }public void onDestroy() { if (currentInroll != null) { currentInroll.invalidate(); currentInroll.setListener(null); } super.onDestroy(); }