기본 통합(ExoPlayer AdsLoader API)
YandexAdsLoader는 Media3 및 ExoPlayer를 통해 InStream 광고를 통합하기 위한 간소화된 API입니다. YandexAdsLoader는 Pre-roll, Mid-roll, Post-roll 유형의 광고 삽입 재생을 지원합니다.
이 통합 유형은 고급 InStream API 기능이 필요하지 않은 앱에 적합합니다.
Gradle을 사용한 통합
build.gradle 파일의 앱 수준에서 다음 종속성을 추가하세요.
dependencies {
...
implementation 'com.yandex.android:mobileads:7.13.0'
implementation 'androidx.media3:media3-exoplayer:1.4.1'
implementation 'androidx.media3:media3-ui:1.4.1'
}
dependencies {
...
implementation 'com.yandex.android:mobileads:7.13.0'
implementation 'com.google.android.exoplayer:exoplayer-core:2.18.1'
}
광고 렌더링
-
앱의 레이아웃에 PlayerView를 추가하세요.
Media3ExoPlayer2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <androidx.media3.ui.PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.google.android.exoplayer2.ui.PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout>
-
InstreamAdRequestConfiguration.Builder
클래스를 사용하여instreamAdRequestConfiguration
요청 구성을 생성합니다. 요청 매개변수에서 Yandex Advertising Network 인터페이스에서 가져온 페이지 ID(PAGE_ID
)를 전달하세요.KotlinJavaval configuration = InstreamAdRequestConfiguration .Builder(PAGE_ID) .build()
InstreamAdRequestConfiguration configuration = new InstreamAdRequestConfiguration .Builder(PAGE_ID) .build();
-
Activity
주기의onCreate()
메서드를 사용하여YandexAdsLoader
인스턴스를 생성하고 InStream 광고를 로드합니다.Примечание
Media3
과 함께YandexAdsLoader
를 사용하려면com.yandex.mobile.ads.instream.media3
패키지에서 가져옵니다.ExoPlayer2
와 함께 사용하려면com.yandex.mobile.ads.instream.exoplayer
패키지에서 가져옵니다.KotlinJavayandexAdsLoader = YandexAdsLoader(context, configuration)
yandexAdsLoader = new YandexAdsLoader(context, configuration);
-
ExoPlayer
를 생성하기 위한 함수를 추가합니다. 함수 내부에서DefaultMediaSourceFactory
인스턴스를 생성하고YandexAdsLoader
및PlayerView
인스턴스에 추가합니다.KotlinJavaprivate fun createPlayer(): Player { val mediaSourceFactory = DefaultMediaSourceFactory(context) .setLocalAdInsertionComponents({ yandexAdsLoader }, playerView) val player = ExoPlayer.Builder(context) .setMediaSourceFactory(mediaSourceFactory) .build() return player }
private YandexAdsLoader yandexAdsLoader; ... private class YandexAdsLoaderProvider implements AdsLoader.Provider { @Nullable @Override public AdsLoader getAdsLoader(@NonNull MediaItem.AdsConfiguration adsConfiguration) { return yandexAdsLoader; } } private Player createPlayer() { AdsLoader.Provider yandexAdsLoaderProvider = new YandexAdsLoaderProvider(); DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setLocalAdInsertionComponents(yandexAdsLoaderProvider, playerView); Player player = new ExoPlayer.Builder(context) .setMediaSourceFactory(mediaSourceFactory) .build(); return player; }
-
MediaItem
을 생성하기 위한 함수를 추가합니다.KotlinJavaprivate fun getMediaItem(): MediaItem { val contentVideoUrl = CONTENT_URL val adTagUri = Uri.parse(YandexAdsLoader.AD_TAG_URI) val mediaItem = MediaItem.Builder() .setUri(contentVideoUrl) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build() return mediaItem }
private MediaItem getMediaItem() { String contentVideoUrl = CONTENT_URL; Uri adTagUri = Uri.parse(YandexAdsLoader.AD_TAG_URI); MediaItem mediaItem = new MediaItem.Builder() .setUri(contentVideoUrl) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build(); return mediaItem; }
-
ExoPlayer
초기화 및 상태 복구를 위한 함수를 추가합니다.KotlinJavaprivate var rememberedPlayerPosition = 0L private var rememberedPlayWhenReady = false private var player: Player? = null ... private fun initPlayer() { val mediaItem = getMediaItem() player = createPlayer().also { playerView.player = it yandexAdsLoader.setPlayer(it) it.setMediaItem(mediaItem) it.playWhenReady = rememberedPlayWhenReady it.seekTo(rememberedPlayerPosition) it.prepare() } }
private Long rememberedPlayerPosition = 0L; private Boolean rememberedPlayWhenReady = false; private Player player = null; ... private void initPlayer() { MediaItem mediaItem = getMediaItem(); Player player = createPlayer(); playerView.setPlayer(player); yandexAdsLoader.setPlayer(player); player.setMediaItem(mediaItem); player.setPlayWhenReady(rememberedPlayWhenReady); player.seekTo(rememberedPlayerPosition); player.prepare(); this.player = player; }
-
release()
메서드를 호출하고ExoPlayer
상태를 저장하기 위한 함수를 추가합니다.KotlinJavaprivate var rememberedPlayerPosition = 0L private var rememberedPlayWhenReady = false private var player: Player? = null ... private fun releasePlayer() { yandexAdsLoader.setPlayer(null) playerView.player = null player?.also { rememberedPlayerPosition = it.contentPosition rememberedPlayWhenReady = it.playWhenReady it.release() } player = null }
private Long rememberedPlayerPosition = 0L; private Boolean rememberedPlayWhenReady = false; private Player player = null; ... private void releasePlayer() { yandexAdsLoader.setPlayer(null); playerView.setPlayer(null); Player player = this.player; if (player != null) { rememberedPlayerPosition = player.getContentPosition(); rememberedPlayWhenReady = player.getPlayWhenReady(); player.release(); } this.player = null; }
-
생성한 함수를 사용하여
onStart()
,onResume()
,onPause()
및onStop()
메서드를 다시 작성합니다.API
버전 23 이하에서는onPause()
및onResume()
메서드에서 생성한 함수를 호출하세요. 최신API
버전에서는onStop()
및onStart()
메서드에서 호출하세요.KotlinJavaoverride fun onStart() { super.onStart() if (Build.VERSION.SDK_INT > 23) { initPlayer() playerView.onResume() } } override fun onStop() { super.onStop() if (Build.VERSION.SDK_INT > 23) { playerView.onPause() releasePlayer() } } override fun onResume() { super.onResume() if (Build.VERSION.SDK_INT <= 23) { initPlayer() playerView.onResume() } } override fun onPause() { super.onPause() if (Build.VERSION.SDK_INT <= 23) { playerView.onPause() releasePlayer() } }
@Override protected void onStart() { super.onStart(); if (Build.VERSION.SDK_INT > 23) { initPlayer(); playerView.onResume(); } } @Override protected void onStop() { super.onStop(); if (Build.VERSION.SDK_INT > 23) { playerView.onPause(); releasePlayer(); } } @Override protected void onResume() { super.onResume(); if (Build.VERSION.SDK_INT <= 23) { initPlayer(); playerView.onResume(); } } @Override protected void onPause() { super.onPause(); if (Build.VERSION.SDK_INT <= 23) { playerView.onPause(); releasePlayer(); } }
-
release()
메서드가 더 이상 필요하지 않을 때YandexAdsLoader
에서 를 호출합니다.KotlinJavaoverride fun onDestroy() { releasePlayer() yandexAdsLoader.release() super.onDestroy() }
@Override protected void onDestroy() { releasePlayer(); yandexAdsLoader.release(); super.onDestroy(); }