본문으로 건너뛰기

시작하기

인스트림 동영상 광고는 사용자가 콘텐츠를 시청하는 동안 재생되는 동영상 광고 형식입니다. 이 가이드에서는 GFP SDK 를 활용하여 인스트림 동영상 광고를 통합하는 방법을 설명합니다.


시작하기 앞서

  • 광고 호출을 위해 Ad Unit ID 가 필요합니다.
    • GFP Admin 을 통해 광고 공급자 설정, Inventory 설정, 광고 유닛 등록 등의 과정을 마무리하여 주시기 바랍니다.
    • 관련 내용은 GFP 관리자에게 문의 부탁드립니다.
  • 광고를 오버레이로 덮는 다른 View 가 있을 경우, 경우에 따라서 노출 측정이 제대로 되지 않아 성과 지표 측정에 불이익이 있을 수 있습니다.

[Step 1] GFP SDK 적용 완료

시작하기를 참고해 주세요.

이하 내용은 GFP SDK 적용이 완료된 상태를 가정하고 진행합니다.


[Step 2] 앱 레벨의 build.gradle 에 의존성 추가

인스트림 동영상 광고를 적용하기 위해서는 아래와 같이 앱 레벨의 build.gradle 파일에 의존성을 추가해야 합니다.

build.gradle.kts
dependencies {
// Import the BoM for the GFP platform
implementation(platform("com.naver.gfpsdk:gfpsdk-bom:8.13.0"))

implementation("com.naver.gfpsdk:gfpsdk-core")
implementation("com.naver.gfpsdk.mediation:ndavideo")

// Optional: Add the dependencies for any other mediation libraries you want to use
// For example, add the mediation library dependencies for Google IMA
implementation("com.naver.gfpsdk:mediation:ima")
...
}

[Step 3] Player 레이아웃이 포함될 수 있는 ViewGroup 추가

비디오 광고를 게재하기 위해서는 먼저 광고를 게재하려는 Activity 또는 Fragment 의 레이아웃에 비디오 광고와 본영상이 재생될 수 있는 영역에 대한 ViewGroup 을 추가해야 합니다.

아래 예제에서는 RelativeLayout ViewGroup 에 video_ad_container 라는 id 로 비디오 광고가 게재될 Layout 을 선언했습니다.

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<!-- 비디오 광고 컨테이너 -->
<RelativeLayout
android:id="@+id/video_ad_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#000000"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

[Step 4] 플레이어와 광고 UI 레이아웃 생성

비디오 광고가 재생되는데 필요한 Player(AdVideoPlayer 에 대한 구현이 되어있어야 함) 와 광고 UI 가 포함될 레이아웃을 선언합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<!-- 실제 비디오 플레이어 뷰 (서비스에서 사용하는 플레이어로 교체 필요) -->
<com.naver.gfpsdk.adssample.video.SampleExoPlayerView
android:id="@+id/ad_video_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true" />

<!-- 광고 UI 컨테이너 (스킵 버튼, 진행바 등) -->
<FrameLayout
android:id="@+id/ad_ui_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<!-- SMR 광고의 리마인드 광고 영역 -->
<FrameLayout
android:id="@+id/outer_text_ad_container"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>

[Step 5] AdParam 과 VideoAdScheduleParam 생성

val adParam = AdParam.Builder().build()

val contentDuration = 653L // 초 단위의 컨텐츠 영상 길이
val adScheduleId = "NDP_ADSCHDL" // GFP 담당자에게 안내 받아야 함
val videoAdScheduleParam = VideoAdScheduleParam.Builder(adScheduleId)
.setDuration(contentDuration)
.setAdSchedulePolicy(true, false, true)
.setAdNoticeDurationSec(5)
.build()

[Step 6] GfpVideoAdScheduleManager 생성 및 설정

// manager 생성
videoAdScheduleManager = GfpVideoAdScheduleManager(
this,
videoAdScheduleParam,
adParam,
adVideoPlayer,
adUiContainer
)

// 비디오 옵션 설정
val videoAdOptions = GfpVideoAdOptions().apply {
supportedStreamingHLS = false
bitrateKbps = -1
videoLoadTimeout = 5000
}
videoAdScheduleManager.setVideoAdOptions(videoAdOptions)

[Step 7] 이벤트 리스너 설정

스케줄 이벤트와 광고 이벤트 리스너를 설정합니다.

// 스케쥴 리스너 설정
videoAdScheduleManager.setAdScheduleListener(object: VideoAdScheduleListener {
override fun onScheduleLoaded(schedule: VideoScheduleResponse) {
// 광고 스케줄이 로드 완료
}
override fun onContentResumeRequest() {
// 컨텐츠 재시작
}
override fun onContentPauseRequest() {
// 컨텐츠 일시정지
}
override fun onScheduleCompleted() {
// 모든 광고 재생 완료
}
override fun onError(error: GfpError) {
// 광고 요청 실패
}
})

// 광고 이벤트 리스너 설정
videoAdScheduleManager.setAdListener(object: VideoAdListener {
override fun onAdLoaded(ad: GfpVideoAd) {
// 광고 로드 성공
}
override fun onAdStartReady(ad: GfpVideoAd) {
ad.start(true)
// 광고 재생 준비 완료
}
// ... 기타 이벤트들
})

[Step 8] 광고 로드 및 생명주기 관리

// 광고 로드
videoAdScheduleManager.load()

// 생명주기 관리
override fun onPause() {
super.onPause()
if (::videoAdScheduleManager.isInitialized) {
videoAdScheduleManager.pause()
}
}

override fun onDestroy() {
super.onDestroy()
if (::videoAdScheduleManager.isInitialized) {
videoAdScheduleManager.destroy()
}
}

AdVideoPlayer 구현

동영상 광고가 재생될 Player는 서비스가 사용하는 Player를 주입받는 형태입니다. 서비스의 플레이어가 AdVideoPlayer interface를 구현해야 합니다.

자세한 구현 예시는 인스트림 동영상 광고 옵션을 참고해 주세요.