본문으로 건너뛰기

베네핏허브(BenefitHub)

베네핏허브를 추가하고 설정하고 SDK 인터페이스를 사용해 부가 기능을 구현하는 방법을 알아보세요.

✏️  참고

  • SDK 인터페이스를 사용하거나 자체적으로 구현하여 커스터마이징하려면 커스터마이징을 참고하세요.
  • 베네핏허브는 피드(Feed)의 새로운 이름입니다.

주요 특징

베네핏허브는 오퍼월 형태의 광고 지면입니다. 대량의 광고 게재가 가능하고 네이티브 지면처럼 앱 UI와 어울리는 디자인을 구현할 수 있다는 장점이 있습니다. 이러한 장점을 기반으로 버즈빌은 다른 유형의 지면에서 베네핏허브로 유저를 유입해 더 많은 광고를 노출하는 경로 설계를 지원합니다.

연동

베네핏허브를 연동하는 방법을 확인해 보세요.

1 단계. 준비하기

  • 시작하기 적용 완료
  • 베네핏허브 지면에 사용할 Unit ID (이하 YOUR_FEED_UNIT_ID)

2 단계. 베네핏허브 초기화하기

BuzzAdBenefitConfigFeedConfig를 추가하세요.

import android.app.Application
import com.buzzvil.buzzad.benefit.BuzzAdBenefitConfig
import com.buzzvil.buzzad.benefit.presentation.feed.FeedConfig
import com.buzzvil.sdk.BuzzvilSdk

class App : Application() {
override fun onCreate() {
super.onCreate()

// Feed(베네핏허브) 설정
val feedConfig = FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.build()

// BuzzBenefit 설정
val buzzAdBenefitConfig = BuzzAdBenefitConfig.Builder("YOUR_APP_ID")
.setDefaultFeedConfig(feedConfig)
.build()

// Buzzvil SDK 초기화
BuzzvilSdk.initialize(
application = this@App,
buzzAdBenefitConfig = buzzAdBenefitConfig
)
}
}

3 단계. 베네핏허브 표시하기

베네핏허브는 전체화면 UI로 나타나며, 광고를 할당 받지 않은 상태에서 베네핏허브가 유저에게 표시되면 광고가 자동으로 할당됩니다.

val buzzAdFeed = BuzzAdFeed.Builder().build() 
buzzAdFeed.show(activity)

❗️ 주의
buzzAdFeed.show()를 반복해서 호출하더라도 광고는 갱신되지 않으며 동일한 광고가 호출됩니다. 광고를 재할당 받으려면 광고 재할당 받기 토픽을 참고하세요.

✏️  참고
유저에게 다른 형태로 베네핏허브를 제공하려면 프래그먼트로 베네핏허브 연동하기 토픽을 참고하세요.

기본 설정 이외의 베네핏허브 표시하기

DefaultFeedConfig로 설정한 FeedConfig를 사용하여 기본 설정을 적용한 베네핏허브 이외에, 다른 설정이 적용된 베네핏허브를 표시할 수 있습니다. 이를 위해서는 BuzzAdFeed.Builder().feedConfig()의 매개변수로 새로운 FeedConfig를 생성하여 넘겨주어야 합니다. 다음의 예시를 참고하세요.

✏️  참고
DefaultFeedCofig를 삭제하지 않아도 됩니다.

val secondFeedConfig = FeedConfig.Builder("SECOND_FEED_UNIT_ID")
.build()
BuzzAdFeed.Builder()
.feedConfig(secondFeedConfig)
.build()
.show(this@MainActivity)

 중요

  • 앱 UI에 진입 경로 구현를 참고하여 베네핏허브 유입을 유도해 보세요.
  • 광고가 정상적으로 표시되면 베네핏허브를 성공적으로 연동한 것입니다. 매출을 한 단계 부스트업할 수 있는 게이미피케이션 기능인 버즈룰렛(BuzzRoulette)을 추가할 수 있습니다. BuzzRoulette 연동을 참고해 버즈룰렛에 대한 자세한 내용을 확인해 보세요.

기본 설정

베네핏허브에서 기본적으로 설정해야 하는 기능을 안내합니다. 앱에서 코드를 수정하거나 재배포하지 않고도 활성화하거나 설정을 변경할 수 있습니다. 베네핏허브를 구성하는 주요 기능들은 아래 그림을 참고하세요.

데일리 리워드

베네핏허브에 기본적으로 탑재되는 리텐션 기능인 데일리 리워드 기능을 활성화해야 합니다. 광고 할당과 표시가 완료되면 버즈빌 담당자(help@buzzvil.com)에게 연락하여 베네핏허브 리텐션 기능을 활성화하세요.

✏️  참고
베네핏허브 리텐션 기능에 대한 정보는 릴리스 뉴스에서 확인하세요.

광고 분류 필터

유저가 참여하고 싶은 유형의 광고만 볼 수 있는 필터 UI를 설정하여 유저의 광고 참여 경험과 광고 효율을 높일 수 있습니다. UI 스트링, 필터 종류 등의 설정을 변경하려면 버즈빌 담당자(help@buzzvil.com)에게 연락하세요.

무한 스크롤 기능

무한 스크롤 기능은 유저가 할당된 광고 목록을 끝까지 스크롤 해 더 이상 볼 수 있는 광고가 없으면 자동으로 추가 광고를 할당하여 보여주는 기능입니다. 이 기능은 기본적으로 활성화되어 있으며, 앱에서 코드를 수정하거나 재배포를 하지 않고 무한 스크롤 기능의 활성화 여부를 설정할 수 있습니다. 설정을 변경하려면 버즈빌 담당자(help@buzzvil.com)에게 연락하세요.

개인정보 제3자 제공 동의 모달

 중요
버즈빌과 개인정보 위수탁 관계이며 앱에서 자체적으로 제공하는 개인정보 처리방침 정책에 버즈빌을 수탁자로 포함하고 있다면, 여기에서 안내하는 개인정보 제3자 제공 동의 UI를 띄우지 않아도 됩니다.

개인 정보 보호법과 구글 정책에 따라, 개인 정보 수집 및 사용에 대한 유저의 동의가 필요합니다. Buzzvil SDK는 동의를 얻기 위한 UI를 제공하며, 유저가 개인 정보 수집에 동의하지 않으면, 베네핏허브 지면에 광고가 할당되지 않습니다. 베네핏허브 지면에 처음 진입한 유저에게는 아래와 같은 UI가 표시됩니다.

유저 프로필 입력 배너

출생연도 또는 성별 정보를 제공하지 않은 유저에게 제공되는 기능입니다. 유저가 베네핏허브에 진입하여 광고를 1개라도 참여하면 베네핏허브 상단에 출생연도와 성별 정보를 입력하는 화면으로 연결되는 배너가 표시됩니다. 이 배너는 하루 한 번만 표시되며 유저가 닫기 버튼을 탭하면 사라집니다.

✏️  참고
유저 프로필 입력 배너의 디자인을 변경하려면 커스터마이징 토픽을 참고하세요.

팝 추가 유도 모달

베네핏허브 진입점인 팝(Pop) 기능을 연동한 경우 사용하게 제공되는 기능입니다. 유저가 베네핏허브에 진입한 후 광고를 클릭한 후 다시 돌아오면 지면 위에 모달이 나타납니다. 모달의 CTA를 탭하면 시스템 설정의 다른 앱 위에 표시 메뉴로 이동합니다.

✏️ 참고
이 기능을 사용하지 않으려면 버즈빌 담당자(help@buzzvil.com)에게 문의하세요.

✏️  참고
팝 추가 유도 모달의 디자인을 변경하려면 커스터마이징 토픽을 참고하세요.

앱 UI에 진입 경로 구현

앱 화면의 아이콘, 버튼, 배너 등 레이아웃 UI에 뷰를 직접 구현하여 베네핏허브로 진입하는 경로를 만들 수 있습니다.

진입 경로를 생성할 수 있는 UI 컴포넌트의 예시는 아래 다이어그램을 참고하세요. 또한 샘플 앱에서 제공하는 다양한 커스텀 진입 경로들의 샘플 코드를 확인해 보세요.

1 단계. 준비하기

❗️ 주의
진입 경로의 정상적인 동작을 위해서는 2단계. 베네핏허브 초기화하기 토픽의 설명에 따라 반드시 BuzzAdBenefitConfigFeedConfig를 추가해야 합니다.

2 단계. 진입 경로 추가하기

액티비티, 프래그먼트, 뷰 내부 등에 베네핏허브 진입 경로를 생성할 수 있습니다. 베네핏허브 진입 경로를 UI 레이아웃에 추가하려면 UI 레이아웃을 구현한 후 FeedEntryView ViewGroup을 추가하세요.

✏️  참고
FeedEntryView는 FrameLayout 입니다.

다음은 your_image를 눌렀을 때 베네핏허브 지면이 열리도록 XML로 진입 경로를 구현한 예시입니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- FeedEntryView을 추가합니다. -->
<com.buzzvil.buzzad.benefit.presentation.feed.entrypoint.FeedEntryView
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<!-- 여기에 UI를 자유롭게 구현합니다. -->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_image" />
</com.buzzvil.buzzad.benefit.presentation.feed.entrypoint.FeedEntryView>

3 단계. 적립 가능한 포인트 표시하기

아래 그림과 같이 적립 가능한 포인트를 표시하여 아직 베네핏허브에 진입하지 않은 유저의 참여율을 높일 수 있습니다.

적립 가능한 포인트를 유저에게 미리 보여 주기 위해 아래 코드를 참고하세요.

✏️  참고
사용자가 광고에 참여하여 리워드를 받거나 피드를 아래로 스크롤하여 새로운 광고를 불러올 경우, 피드 진입 뷰에 표시된 적립 가능한 포인트 값과 실제로 적립 가능한 포인트 값에 차이가 발생할 수도 있습니다.

buzzAdFeed.load(object : BuzzAdFeed.FeedLoadListener {
override fun onSuccess() {
val availableReward = buzzAdFeed.getAvailableRewards()
// 적립 가능한 포인트를 직접 구현한 UI에 업데이트합니다.
}

override fun onError(error: AdError?) {
// 적립 가능한 포인트를 가져올 수 없는 경우
}
})

추가 구현

베네핏허브에서 추가 기능을 구현하는 방법을 안내합니다.

광고 타입 확인하기

Buzzvil SDK는 노출형, 액션형 등 다양한 광고 유형별로 차별화된 리워드 제공 등 다양한 기획을 지원하기 위해 광고 유형을 확인할 수 있는 API를 제공합니다. API에 대한 자세한 내용은 유저 편의 기능광고 타입 확인하기를 참고하세요.

프래그먼트로 베네핏허브 연동하기

베네핏허브의 내비게이션 바를 사용하지 않고 앱의 내비게이션 바를 사용하려면 프래그먼트로 베네핏허브를 연동해야 합니다.

❗️ 주의

  • 프래그먼트로 연동하는 경우 별개의 Activity에 BenefitHubFragment를 단독으로 사용하세요.
  • BenefitHubFragment는 '뒤로 가기 시 Activity 종료' 등의 기능을 포함하고 있어 현재 실행 중인 Activity에 영향을 끼칠 수 있습니다.
  • BenefitHubFragment는 내비게이션 바 커스텀을 위해 제공되는 컴포넌트이며, Single Activity 구조에 적용하거나 다른 뷰 컨테이너에 포함되기에는 적합하지 않습니다.

프래그먼트로 베네핏허브 지면을 연동하려면, 액티비티에 프래그먼트를 추가하고 해당 액티비티의 onCreate()에서 프래그먼트를 초기하세요.

다음은 BenefitHubFragment를 연동하는 예시입니다.

class YourBenefitHubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_your_benefit_hub)

if (savedInstanceState == null) {
val benefitHubFragment = BenefitHubFragment.getInstance()

supportFragmentManager.beginTransaction().apply {
add(com.buzzvil.buzzad.benefit.presentation.feed.R.id.fragmentContainer, benefitHubFragment)
commit()
}
}
}
}
<!-- activity_your_benefit_hub.xml -->

<?xml version="1.0" encoding="utf-8"?>
<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=".YourBenefitHubActivity">

<!-- 내비게이션 바를 원하는 형태로 구현합니다. -->
<LinearLayout
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="64dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title" />
</LinearLayout>

<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
</androidx.constraintlayout.widget.ConstraintLayout>

기본 내비게이션 바 제거하기

아래 코드를 참고하여 기본 내비게이션 바를 제거하세요.

class YourBenefitHubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_your_benefit_hub)

if (savedInstanceState == null) {

val feedConfig = FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.navigationBarVisibility(false)
.build()
val benefitHubFragment = BenefitHubFragment.getInstance(feedConfig)

supportFragmentManager.beginTransaction().apply {
add(com.buzzvil.buzzad.benefit.presentation.feed.R.id.fragmentContainer, benefitHubFragment)
commit()
}
}
}
}

광고 재할당 받기

새로운 광고를 할당받으려면 buzzAdFeed.show()를 호출하기 전에 buzzAdFeed.load()를 호출하세요.

buzzAdFeed.load(object : BuzzAdFeed.FeedLoadListener {
override fun onSuccess() {
// 광고 재할당에 성공한 경우 호출됩니다.
}
override fun onError(error: AdError?) {
// 광고 재할당에 실패한 경우 호출됩니다.
}
})

✏️  참고
광고 할당을 위해 개인 정보 처리 동의를 받으려면 SDK에서 제공하는 개인정보 제3자 제공 동의 모달 토픽을 참고하세요.

 오류
광고 미할당 시 발생하는 오류 코드에 대한 자세한 내용은 오류 코드가 나타납니다 토픽을 참고하세요.