본문으로 건너뛰기

마이그레이션 v3.45 → v5.9

여기에서는 BuzzAd Android SDK 3.45.x 버전에서 Buzzvil Android SDK 5.9.x 버전으로 마이그레이션하기 위한 설정을 안내합니다.

✏️  참고

  • 버즈베네핏이 출시되면서 버즈빌의 모든 SDK의 주(Major) 버전이 5로 맞춰졌습니다. 중간 숫자인 4점대는 존재하지 않으니 참고 부탁드립니다.
  • Buzzvil Android SDK v5 부터는 Kotlin으로 가이드 및 샘플 코드를 제공합니다. Java 샘플 코드는 제공하지 않습니다.

 중요
Buzzvil SDK 5점대부터는 계약 구조가 변경되었습니다. BuzzAd SDK 3점대 및 BuzzScreen SDK 4점대에서 Buzzvil SDK 5점대로 마이그레이션하는 경우, 계약서 갱신에 대해 반드시 버즈빌 담당 매니저 혹은 팀메일(partnership@buzzvil.com)로 문의 부탁드립니다.

시작하기 마이그레이션

요구 사양

  1. 아래와 같이 Buzzvil SDK v5.9에서 변경된 요구 사양을 확인하고 프로젝트 설정에 반영하세요.
  • Android 5.0 Lollipop (API 레벨 21) 이상
  • Android Studio Bumblebee 이상
  • Gradle 4.2 이상
  • compileSdkVersion 33 이상
  • AndroidX
  • JDK 1.8
  1. 소스 코드에서 또는 종속 항목을 통해 Java 8 언어 기능을 사용하는 각 모듈의 경우 다음과 같이 모듈의 build.gradle 또는 build.gradle.kts 파일을 업데이트하세요.
// 공식 문서 링크: https://developer.android.com/studio/write/java8-support?hl=ko#supported_features

android {
...
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "1.8"
}
}

연동용 ID 발급받기

기존과 동일한 App ID와 Unit ID를 사용할 수 있습니다.

SDK 설치하기

버즈빌에서 제공하는 다양한 제품군의 버전 의존성 관리를 위해 buzzvil-bom이 도입되었습니다. 모듈 레벨의 build.gradle 파일에 Buzzvil SDK 라이브러리를 설정하세요.

// 모듈 레벨의 build.gradle

dependencies {
api platform("com.buzzvil:buzzvil-bom:5.9.+")
implementation "com.buzzvil:buzzvil-sdk"
}
참고 - 변경 전 코드(BuzzAdBenefit SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

// 모듈 레벨의 build.gradle

dependencies {
implementation ("com.buzzvil:buzzad-benefit:3.45.+") // BuzzAd SDK 라이브러리 예시
}

SDK 초기화하기

SDK 초기화를 위해 사용하던 BuzzAdBenefit 클래스가 BuzzvilSdk 클래스로 대체되었습니다. 아래 내용을 참고하여 BuzzAdBenefit에서 BuzzvilSdk로 마이그레이션 하세요.

APP ID 추가하기

App ID를 설정하고 SDK를 초기화하는 방법이 변경되었습니다.

  1. AndroidManifest.xml 파일에 등록한 버즈빌 APP_KEY를 삭제하세요.
<!-- AndroidManifest.xml -->

<manifest>
<application>

<!-- 아래 메타 데이터를 삭제합니다. -->
<meta-data
android:name="com.buzzvil.APP_KEY"
android:value="app-pub-{YOUR_APP_ID}" />

</application>
</manifest>
  1. 아래 코드를 참고하여 App ID를 등록하고 SDK를 초기화 하세요.
import android.app.Application
import com.buzzvil.buzzad.benefit.BuzzAdBenefitConfig
import com.buzzvil.sdk.BuzzvilSdk

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

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

// Buzzvil SDK 초기화
BuzzvilSdk.initialize(
application = this@App,
buzzAdBenefitConfig = buzzAdBenefitConfig
)
}
}
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class App extends Application {
@Override
public void onCreate() {
super.onCreate();

// BuzzAdBenefit 초기화
final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(getApplicationContext())
.build();
BuzzAdBenefit.init(getApplicationContext(), buzzAdBenefitConfig);
}
}

유저 프로필 동록하기

  • BuzzAdBenefit.setUserProfile() 대신 BuzzvilSdk.setUserProfile()을 사용합니다.
// 유저 정보를 등록합니다.
BuzzvilSdk.setUserProfile(
userId = "SAMPLE_USER_ID",
gender = UserProfile.Gender.MALE,
birthYear = 1980
)

// 유저 정보를 삭제합니다.
BuzzvilSdk.setUserProfile(null)
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

// 사용자 정보를 등록하는 코드입니다.
final UserProfile.Builder builder = new UserProfile.Builder(BuzzAdBenefit.getUserProfile());
final UserProfile userProfile = builder
.userId("USER_ID")
.gender(UserProfile.Gender.MALE) //남성 사용자
.birthYear(YYYY)
.build();
BuzzAdBenefit.setUserProfile(userProfile);

// SDK에 등록한 사용자 프로필을 삭제하는 코드입니다.
// BuzzAdBenefit.setUserProfile(null);

베네핏허브(피드) 마이그레이션

✏️  참고
베네핏허브는 피드(Feed)의 새로운 이름입니다.

v3.45 기본 설정 → v5.9 연동

BuzzAd SDK 3.45.x 버전에서는 '기본 설정'으로 제공하던 기능이 Buzzvil SDK 5.9.x 버전에서는 '연동' 항목으로 제공됩니다. 별도의 기능을 적용하지 않으면 베네핏허브 지면을 초기화하고 표시하는 방법은 기존의 방법과 동일합니다.

베네핏허브 초기화하기

기존과 동일하게 FeedConfig를 사용하여 베네핏허브 지면을 설정하고 BuzzAdBenefitConfig에 등록합니다.

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
)
}
}
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class App extends Application {
@Override
public void onCreate() {
super.onCreate();

final FeedConfig feedConfig = new FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.build();

final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(getApplicationContext())
.setDefaultFeedConfig(feedConfig)
.build();

BuzzAdBenefit.init(getApplicationContext(), buzzAdBenefitConfig);

...
}
}

베네핏허브 표시하기

기존과 동일하게 BuzzAdFeed.show()를 호출하여 베네핏허브를 표시합니다.

val buzzAdFeed = BuzzAdFeed.Builder().build() 
buzzAdFeed.show(activity)
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

new BuzzAdFeed.Builder().build().show(context);

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

기존과 동일하게 FeedConfig를 설정하여 기본 설정 이외의 베네핏허브를 표시합니다.

val secondFeedConfig = FeedConfig.Builder("SECOND_FEED_UNIT_ID")
.build()
BuzzAdFeed.Builder()
.feedConfig(secondFeedConfig)
.build()
.show(this@MainActivity)
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig feedConfig = new FeedConfig.Builder("SECOND_FEED_UNIT_ID").build();
BuzzAdFeed buzzAdFeed = new BuzzAdFeed.Builder()
.feedConfig(feedConfig)
.build();
buzzAdFeed.show(context);

v3.45 고급 설정 → v5.9 기본 설정

BuzzAd SDK 3.45.x 버전에서는 고급 설정으로 제공하던 기능이 Buzzvil SDK 5.9.x 버전에서는 기본 설정으로 제공됩니다.

v3.45 광고 분류 탭과 필터 → v5.9 광고 분류 필터

Buzzvil SDK 5.9.x 버전에서는 탭 UI가 삭제되고 필터 UI만 보여집니다. 또한 필터 UI는 비활성화 할 수 없습니다. UI 스트링, 필터 종류 등의 설정을 변경하려면 버즈빌 담당자(help@buzzvil.com)에게 연락하세요.

v3.45 앱 UI에 진입 경로 추가 → v5.9 앱 UI에 진입 경로 구현

뷰에 대한 사용자 반응 추적(buzzvilFeedEntryViewName) 기능이 삭제되었습니다. FeedEntryView에서 app:buzzvilFeedEntryViewName 항목을 삭제하세요.

<com.buzzvil.buzzad.benefit.presentation.feed.entrypoint.FeedEntryView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 뷰에 대한 사용자 반응 추적이 삭제되었습니다. -->
<!-- app:buzzvilFeedEntryViewName="your_custom_entry_point_1" -->

...
</com.buzzvil.buzzad.benefit.presentation.feed.entrypoint.FeedEntryView>

v3.45 툴바 자체 구현하기 → v5.9 내비게이션 바

Buzzvil SDK 5.9.x 버전에서는 "툴바"를 "내비게이션 바"로 명칭을 변경했으며, 직접 구현한 Custom View를 피드에 적용하는 방식에서 베네핏허브(피드) 바깥 영역에 내비게이션 바를 구현하는 방식으로 변경되었습니다. 아래 코드를 삭제하세요.

  • DefaultFeedToolbarHolder 클래스
  • FeedConfig.Builder.feedToolbarHolderClass()
  • BuzzAdFeedTheme.toolbarHeight()
  1. v3.45 SDK 기본 UI 사용하기 → v5.9 내비게이션 바 UI 스트링 변경하기

기본 UI를 사용하는 경우, 타이틀 문자열만 변경할 수 있도록 간소화되었습니다. 아이콘 추가/변경이 필요한 경우 자체 구현하기 항목을 참고하세요.

내비게이션 바의 UI 스트링을 변경하는 방법은 아래 코드를 참고하세요.

<!-- res/values/strings.xml -->
<resources>
<string name="your_custom_title">커스텀 타이틀</string>
</resources>
val buzzAdFeedTheme = BuzzAdFeedTheme.getDefault()
.navigationBarTitle(R.string.your_custom_title)
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme)
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class YourFeedToolbarHolder extends DefaultFeedToolbarHolder {

@Override
public View getView(Activity activity, @NonNull final String unitId) {
super.toolbar = new FeedToolbar(activity); // FeedToolbar 에서 제공하는 기본 템플릿을 사용합니다.
toolbar.setTitle("YourFeedToolbarHolder");
toolbar.setIconResource(R.drawable.your_icon); // 이미지 사이즈 규격은 24dp 입니다.
toolbar.setBackgroundColor(Color.parseColor("#123456"));

super.addInquiryMenuItemView(activity); // 문의하기 버튼은 이 함수를 통해 추가할 수 있습니다.
super.addSettingsMenuItemView(activity); // 세팅 버튼은 이 함수를 통해 추가할 수 있습니다.
addRightMenuItemView1(activity); // 커스터마이징한 버튼 추가할 수 있습니다.
return toolbar;
}

// 커스터마이징한 버튼을 추가하려면 DefaultMenuLayout 를 사용하여 View 를 생성하고
// toolbar.addRightMenuButton 를 사용하여 toolbar 에 추가합니다.
private void addRightMenuItemView1(@NonNull final Activity activity) {
MenuLayout menuLayout = new DefaultMenuLayout(activity, R.mipmap.ic_launcher);
menuLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInquiry(); // showInquiry 를 호출하여 문의하기 페이지로 연결합니다.
}
});
toolbar.addRightMenuButton(menuLayout);
}
}
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig feedConfig = new FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.feedToolbarHolderClass(YourFeedToolbarHolder.class)
.build();
  1. v3.45 직접 구현한 Custom View 사용하기 → v5.9 내비게이션 바 자체 구현하기

직접 구현한 툴바(내비게이션 바)는 베네핏허브 프래그먼트의 바깥 영역에 구현할 수 있도록 변경되었습니다.

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

프래그먼트로 베네핏허브 지면을 연동하려면, 액티비티에 프래그먼트를 추가하고 해당 액티비티의 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()
}
}
}
}
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class YourFeedToolbarHolder extends DefaultFeedToolbarHolder {

@Override
public View getView(final Activity activity, @NonNull final String unitId) {
final LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return inflater.inflate(R.layout.your_toolbar_holder_layout, null);
}

@Override
public void onTotalRewardUpdated(int totalReward) {
// 적립 가능한 리워드를 UI에 적용할 수 있습니다.
}
}
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig feedConfig = new FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.feedToolbarHolderClass(YourFeedToolbarHolder.class)
.build();
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final BuzzAdFeedTheme buzzAdFeedTheme =
BuzzAdFeedTheme.getDefault()
.toolbarHeight(R.dimen.YOUR_TOOL_BAR_HEIGHT);
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme);

헤더 영역 자체 구현하기

헤더 영역을 자체 구현하는 방법은 기존과 동일합니다. 하지만 헤더 주변 영역의 여백이 변경되었으므로 디자인 검수 후 여백을 추가하는 것을 권장합니다.

✏️ 참고

기본 적립 포인트(베이스 리워드) 알림 팝업 자체 구현하기

Buzzvil SDK 5.9.x 버전에서 베이스 리워드의 UI가 화면 하단에 노출되는 모달로 변경되었습니다. BuzzAd SDK 3.45.x 버전에서 자체 구현한 코드가 있다면 삭제해주세요.

  • BaseRewardNotificationAdapter 클래스가 삭제되었습니다.
  • FeedConfig.Builder.baseRewardNotificationAdapterClass()가 삭제되었습니다.
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class CustomBaseRewardNotificationAdapter implements BaseRewardNotificationAdapter {

@NonNull
@Override
public View onCreateView(@NonNull Context context, @NonNull ViewGroup viewGroup) {
return LayoutInflater.from(context).inflate(R.layout.YOUR_LAYOUT, viewGroup, false);
}

@Override
public void onBindView(@NonNull View view, int reward) {
TextView textView = view.findViewById(R.id.YOUR_TEXT_ID);
textView.setText(reward + " 포인트가 적립되었습니다.");
}
}
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig feedConfig = new FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.baseRewardNotificationAdapterClass(CustomBaseRewardNotificationAdapter.class)
.build();

광고 디자인 자체 구현하기

Buzzvil SDK v5에서는 AdsAdapter가 삭제되고 BenefitHubAdViewAdapter가 추가되었습니다. 기존 연동 코드(AdsAdapter)를 모두 삭제 후 새로운 연동 방식(BenefitHubAdViewAdapter)을 적용하세요.

  • AdsAdapterRecyclerViewAdapter를 상속받아 동작까지 구현하는 방식이었습니다.
  • BenefitHubAdViewAdapter는 ‘헤더 영역 구현하기’ 처럼 View만 변경할 수 있는 방식입니다.

새로운 구현 방식으로 마이그레이션이 어려운 경우 버즈빌 담당자(help@buzzvil.com)에게 연락하여 지원을 받으시기 바랍니다.

기존 연동 코드에서 아래 코드를 삭제하세요.

  • AdsAdapter를 상속 받은 클래스를 삭제하세요.
  • FeedConfig.BuilderadsAdapterClass(), cpsAdsAdapterClass()를 삭제하세요.

광고의 디자인을 변경하려면 다음의 절차를 따르세요.

❗️ 주의
NativeAdView는 광고 디자인 자체 구현에서만 사용해야 합니다. 네이티브 구현은 NativeAd2View를 사용하세요. 자세한 내용은 네이티브 마이그레이션을 참고하세요.

  1. 광고용 NativeAdView의 규격에 맞는 레이아웃(your_benefit_hub_ad.xml)을 구현하세요.

    <!-- your_benefit_hub_ad.xml -->

    <com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView
    android:id="@+id/nativeAdView" ...>

    <!-- MediaView와 DefaultCtaView는 NativeAdView의 하위 컴포넌트로 구현해야 합니다. -->
    <!-- 참고: NativeAdView는 FrameLayout 입니다. -->
    <LinearLayout ... >

    <!-- MediaView는 일반 광고와 쇼핑 광고에서 모두 사용됩니다. -->
    <com.buzzvil.buzzad.benefit.presentation.media.MediaView
    android:id="@+id/mediaView" ... />

    <!-- 일반 광고에서 사용되는 뷰 레이아웃입니다. -->
    <LinearLayout android:id="@+id/excpsLayout" ... >
    <androidx.appcompat.widget.AppCompatImageView android:id="@+id/adIconImage" ... />

    <TextView android:id="@+id/adTitleText" ... />

    <TextView android:id="@+id/adDescriptionText" ... />
    </LinearLayout>

    <!-- 쇼핑 광고에서 사용되는 뷰 레이아웃입니다. -->
    <LinearLayout android:id="@+id/cpsLayout" ...>
    <TextView android:id="@+id/discountPercentageText" ... />

    <TextView android:id="@+id/priceText" ... />

    <TextView android:id="@+id/originalPriceText" ... />
    </LinearLayout>

    <!-- DefaultCtaView 대신 직접 구현한 CustomCtaView를 사용할 수 있습니다. -->
    <com.buzzvil.buzzad.benefit.presentation.media.DefaultCtaView
    android:id="@+id/ctaView" ... />

    </LinearLayout>

    </com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView>
  2. BenefitHubAdViewAdapter의 상속 클래스를 구현하세요.

    • onCreateView()에서 your_benefit_hub_ad.xml을 사용하여 뷰를 생성하세요.
    • onBindView()에서 NativeAdViewBinder를 이용하여 광고 데이터(NativeAd)를 앞서 생성한 NativeAdView에 바인딩하세요.
      • onBindView()NativeAdView를 반환해야 합니다.
    • onDestroyView()에서 리스너 및 뷰를 해제하세요.
    • NativeAdEventListener를 통해 광고 콜백 이벤트 수신 기능을 부가적으로 추가할 수도 있습니다.
    class CustomBenefitHubAdViewAdapter : BenefitHubAdViewAdapter {
    private lateinit var binding: YourBenefitHubAdBinding
    private var nativeAd: NativeAd? = null
    private var nativeAdViewBinder: NativeAdViewBinder? = null

    // 리스너 구현은 선택 사항입니다.
    private val listener = object : NativeAdEventListener {
    override fun onImpressed(nativeAd: NativeAd) {}
    override fun onClicked(nativeAd: NativeAd) {}
    override fun onRewardRequested(nativeAd: NativeAd) {}
    override fun onRewarded(nativeAd: NativeAd, nativeAdRewardResult: RewardResult?) {}
    override fun onParticipated(nativeAd: NativeAd) {}
    }

    override fun onCreateView(context: Context, parent: ViewGroup): View {
    val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    binding = YourBenefitHubAdBinding.inflate(inflater, parent, false)
    return binding.root
    }

    override fun getNativeAdView(): NativeAdView {
    return binding.nativeAdView
    }

    override fun onBindView(nativeAd: NativeAd) {
    val builder = NativeAdViewBinder.Builder(binding.root, binding.adMediaView)
    .addClickableView(binding.clickableArea)
    .ctaView(binding.adCtaView)
    .iconImageView(binding.adIconImage)
    .titleTextView(binding.adTitleText)
    .descriptionTextView(binding.adDescriptionText)

    if (nativeAd.shoppingProduct == null) {
    // 일반 광고 (CPS 외)
    binding.excpsLayout.visibility = View.VISIBLE
    binding.cpsLayout.visibility = View.GONE
    } else {
    // 쇼핑 광고 (CPS)
    binding.excpsLayout.visibility = View.GONE
    binding.cpsLayout.visibility = View.VISIBLE

    setCpsView(nativeAd.shoppingProduct!!)
    }

    val nativeAdViewBinder = builder.build()
    nativeAdViewBinder.bind(nativeAd)

    nativeAd.addNativeAdEventListener(listener)

    this.nativeAd = nativeAd
    this.nativeAdViewBinder = nativeAdViewBinder
    }

    override fun onDestroyView() {
    nativeAd?.removeNativeAdEventListener(listener)
    nativeAdViewBinder?.unbind()

    nativeAd = null
    nativeAdViewBinder = null
    }

    private fun setCpsView(product: Product) {
    val discountedPrice = product.discountedPrice
    if (discountedPrice != null) {
    // 할인이 있는 쇼핑 광고
    binding.originalPriceText.paintFlags = binding.originalPriceText.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
    var percentage = 0
    if (product.price > discountedPrice) {
    percentage = ((product.price - discountedPrice) / product.price * 100).roundToInt()
    }
    if (percentage > 0) {
    binding.priceText.text = getCommaSeparatedPrice(discountedPrice.toLong())
    binding.originalPriceText.text = getCommaSeparatedPrice(product.price.toLong())
    binding.discountPercentageText.text = String.format(Locale.ROOT, "%d%%", percentage)
    binding.discountPercentageText.visibility = View.VISIBLE
    } else {
    binding.priceText.text = getCommaSeparatedPrice(product.price.toLong())
    binding.originalPriceText.text = ""
    binding.discountPercentageText.visibility = View.GONE
    }
    } else {
    // 할인이 없는 쇼핑 광고
    binding.priceText.text = getCommaSeparatedPrice(product.price.toLong())
    binding.originalPriceText.text = ""
    binding.discountPercentageText.visibility = View.GONE
    }
    }

    private fun getCommaSeparatedPrice(price: Long): String {
    val contextForResource = binding.root.context
    return String.format(
    Locale.getDefault(),
    contextForResource.getString(R.string.custom_cps_price_unit),
    price
    )
    }
    }
    <!-- res/values/strings.xml -->
    <resources>
    <string name="custom_cps_price_unit">%,d원</string>
    </resources>
  3. FeedConfig에 위에서 작성한 CustomBenefitHubAdViewAdapter를 광고 어댑터 클래스로 설정하세요.

    val feedConfig = FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
    .benefitHubAdViewAdapterClass(CustomBenefitHubAdViewAdapter::class.java)
    .build()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class CustomAdsAdapter extends AdsAdapter<AdsAdapter.NativeAdViewHolder> {

@NonNull
@Override
public NativeAdViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
final NativeAdView feedNativeAdView = (NativeAdView) inflater.inflate(R.layout.your_feed_ad, parent, false);
return new NativeAdViewHolder(feedNativeAdView);
}

@Override
public void onBindViewHolder(NativeAdViewHolder holder, NativeAd nativeAd) {
super.onBindViewHolder(holder, nativeAd);
final NativeAdView view = (NativeAdView) holder.itemView;

// 광고 레이아웃 컴포넌트를 생성합니다.
final MediaView mediaView = view.findViewById(R.id.mediaView);
final TextView titleView = view.findViewById(R.id.textTitle);
final ImageView iconView = view.findViewById(R.id.imageIcon);
final TextView descriptionView = view.findViewById(R.id.textDescription);
final DefaultCtaView ctaView = view.findViewById(R.id.ctaView);

// 광고 데이터(NativeAd)를 바인딩합니다.
final NativeAdViewBinder viewBinder = new NativeAdViewBinder.Builder(view, mediaView)
.titleTextView(titleView)
.descriptionTextView(descriptionView)
.iconImageView(iconView)
.ctaView(ctaView)
.build();
viewBinder.bind(nativeAd);
}
}

✏️ 참고

CTA 버튼 자체 구현하기

Buzzvil SDK v5에서 변경된 기능이 없습니다.

✏️ 참고

광고 미할당 안내 디자인 자체 구현하기

Buzzvil SDK v5에서는 뷰를 갈아끼우는 방식에서, 이미지와 문자열만 변경할 수 있는 방식으로 변경되었습니다. 아래 코드를 삭제하세요.

  • FeedErrorViewHolder를 상속받은 커스텀 에러 뷰 클래스
  • FeedConfig.BuilderfeedErrorViewHolderClass()

광고 미할당 시 이탈을 막기 위해 유저는 3번까지 재시도하는 UX로 설계되어 있습니다. 광고 미할당 안내 UI에서는 각 재시도 회차별 UI 스트링과 이미지를 변경할 수 있습니다.

재시도 회차제목내용버튼
0회차미션을 준비 중이에요다시 미션을 불러와서 포인트를 모아보시겠어요?미션 불러오기
1회차미션을 준비 중이에요미션을 로딩 중이에요. 잠시 후 다시 시도해주세요.다시 불러오기
2회차미션을 준비 중이에요미션 준비에 시간이 걸리고 있습니다. 잠시 후 다시 시도해주세요.한번 더 불러오기
3회차(마지막)미션을 준비 중이에요전체 필터: 지금은 참여 가능한 미션이 없습니다. 잠시 후 다시 방문해주세요.
그 외 필터: 지금은 참여 가능한 미션이 없습니다. 다른 미션에 참여해서 포인트를 모아보세요!
전체 필터: 나중에 다시 올게요
그 외 필터: 다른 미션 참여하기
<!-- res/values/strings.xml -->
<string name="your_no_fill_error_title">미션을 준비 중이에요</string>

<string name="your_no_fill_error_description_1st">다시 미션을 불러와서 포인트를 모아보시겠어요?</string>
<string name="your_no_fill_error_description_2nd">미션을 로딩 중이에요. 잠시 후 다시 시도해주세요.</string>
<string name="your_no_fill_error_description_3rd">미션 준비에 시간이 걸리고 있습니다. 잠시 후 다시 시도해주세요.</string>
<string name="your_no_fill_error_description_final_all_filter">지금은 참여 가능한 미션이 없습니다. 잠시 후 다시 방문해주세요.</string>
<string name="your_no_fill_error_description_final_other_filters">다른 미션 참여하기</string>

<string name="your_no_fill_error_button_1st">미션 불러오기</string>
<string name="your_no_fill_error_button_2nd">다시 불러오기</string>
<string name="your_no_fill_error_button_3rd">한번 더 불러오기</string>
<string name="your_no_fill_error_button_final_all_filter">나중에 다시 올게요</string>
<string name="your_no_fill_error_button_final_other_filters">지금은 참여 가능한 미션이 없습니다. 다른 미션에 참여해서 포인트를 모아보세요!</string>
class App : Application() {
override fun onCreate() {
super.onCreate()

val buzzAdBenefitConfig = ...

// BuzzvilSdk.initialize()를 호출하기 전에 FeedTheme을 설정합니다.
val buzzAdFeedTheme = BuzzAdFeedTheme()
.noFillErrorImage(R.drawable.your_no_fill_error_image)
.noFillErrorTitle(R.string.your_no_fill_error_title)
.noFillErrorDescription1st(R.string.your_no_fill_error_description_1st)
.noFillErrorDescription2nd(R.string.your_no_fill_error_description_2nd)
.noFillErrorDescription3rd(R.string.your_no_fill_error_description_3rd)
.noFillErrorDescriptionFinalAllFilter(R.string.your_no_fill_error_description_final_all_filter)
.noFillErrorDescriptionFinalOtherFilters(R.string.your_no_fill_error_description_final_other_filters)
.noFillErrorButton1st(R.string.your_no_fill_error_button_1st)
.noFillErrorButton2nd(R.string.your_no_fill_error_button_2nd)
.noFillErrorButton3rd(R.string.your_no_fill_error_button_3rd)
.noFillErrorButtonFinalAllFilter(R.string.your_no_fill_error_button_final_all_filter)
.noFillErrorButtonFinalOtherFilters(R.string.your_no_fill_error_button_final_other_filters)
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme)

// Buzzvil SDK 초기화
BuzzvilSdk.initialize(...)
}
}
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

public class CustomErrorView extends FeedErrorViewHolder {
View errorView = activity.getLayoutInflater().inflate(R.layout.custom_feed_error_view, null, false);
final ImageView errorImageView = errorView.findViewById(R.id.feedErrorImageView);
final TextView errorTitle = errorView.findViewById(R.id.feedErrorTitle);
final TextView errorDescription = errorView.findViewById(R.id.feedErrorDescription);

@NonNull
@Override
public View getErrorView(@NonNull Activity activity) {
// TODO: 1번에서 생성한 custom_feed_error_view 레이아웃을 inflate

errorImageView.setImageResource(R.drawable.bz_ic_feed_profile_coin); // 에러 이미지 설정
errorTitle.setText("타이틀: 광고가 없습니다. "); // 에러 타이틀 텍스트 설정
errorDescription.setText("디스크립션: 할당된 광고가 없습니다!"); // 에러 상세 텍스트 설정

return errorView;
}

@Override
public updateErrorView(AdErrorType adErrorType) {
// TODO: 위에서 선언한 View를 업데이트 할 수 있는 코드를 작성하세요.
...
}
}
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

// Feed 지면 초기화
// TODO: feedErrorViewHolderClass 속성에 2번에서 생성한 CustomErrorView 클래스를 설정합니다.
final FeedConfig feedConfig = new FeedConfig.Builder(YOUR_FEED_UNIT_ID)
.feedErrorViewHolderClass(CustomErrorView.class)
.build();

✏️ 참고

오류 화면 커스터마이징하기

Buzzvil SDK v5에서는 광고 미할당 안내 UI 외에도 오류 화면 커스터마이징 지원이 새롭게 추가되었습니다. 유저 프로필 오류 안내 UI, 기타 오류 화면 UI를 참고하세요.

개인정보 제3자 제공 동의 UI

Buzzvil SDK v5에서는 개인정보 제3자 제공 동의 UI가 모달로 변경되었으며, 코드 배포 없이 원격으로 설정할 수 있도록 변경되었습니다. 아래 코드를 삭제하세요.

  • BuzzAdBenefit.getPrivacyPolicyManager()
  • PrivacyPolicyManager.showConsentUI()
  • PrivacyPolicyManager.grantConsent()
  • PrivacyPolicyManager.revokeConsent()
  • PrivacyPolicyManager.isConsentGranted()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

PrivacyPolicyManager privacyPolicyManager = BuzzAdBenefit.getPrivacyPolicyManager();
privacyPolicyManager.grantConsent();
privacyPolicyManager.revokeConsent();
privacyPolicyManager.showConsentUI(context, new PrivacyPolicyEventListener() {
@Override
void onUpdated(boolean accepted) {}
});

✏️ 참고

사용자 프로필 입력 배너 노출 여부 설정하기

Buzzvil SDK v5에서는 코드 배포 없이 원격으로 설정할 수 있도록 업데이트되었습니다. 아래 코드를 삭제하세요.

  • FeedConfig.BuilderprofileBannerEnabled()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig feedConfig = new FeedConfig.Builder("YOUR_FEED_UNIT_ID")
.profileBannerEnabled(false) // 프로필 배너 미노출
.build();

✏️ 참고

프래그먼트로 베네핏허브(피드) 연동하기

Buzzvil SDK v5에서는 프래그먼트를 가져오는 방식이 변경되었습니다. 기존 연동 코드를 삭제하고 가이드를 참고하여 새로운 방식으로 연동하세요.

프래그먼트로 베네핏허브 지면을 연동하려면, 액티비티에 프래그먼트를 추가하고 해당 액티비티의 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">

<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>
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

class YourActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your);

// 광고를 새로 할당 받기 위해 필요한 부분입니다.
final BuzzAdFeed buzzAdFeed = new BuzzAdFeed.Builder().build();

final FeedFragment feedFragment = buzzAdFeed.getFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content, feedFragment)
.commitAllowingStateLoss();

}
}
<!-- 참고 - 변경 전 코드(BuzzAd SDK v3.45) -->

<?xml version="1.0" encoding="utf-8"?>
<!--activity_your.xml-->
<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=".feed.FeedFragmentActivity">

<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

✏️ 참고

디자인 커스터마이징

피드 색상 변경하기

Buzzvil SDK 5.9.x 버전에서는 피드 색상 변경 기능을 더 이상 지원하지 않습니다. 아래 코드를 삭제하세요.

  • BuzzAdFeedThemebackgroundColor()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final BuzzAdFeedTheme buzzAdFeedTheme =
BuzzAdFeedTheme.getDefault()
.backgroundColor(R.color.YOUR_BACKGROUND_COLOR) // Feed의 배경 색상
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme);

✏️ 참고

탭 디자인 변경하기

Buzzvil SDK 5.9.x 버전에서는 탭 UI를 더 이상 지원하지 않습니다. 아래 코드를 삭제하세요.

  • BuzzAdFeedThemetabTextColorSelector()
  • BuzzAdFeedThemetabBackgroundColor()
  • BuzzAdFeedThemetabIndicatorSelector()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final BuzzAdFeedTheme buzzAdFeedTheme =
BuzzAdFeedTheme.getDefault()
...생략...
.tabTextColorSelector(R.color.YOUR_TEXT_COLOR) // 탭의 텍스트 색상(state_selected 필수 적용)
.tabBackgroundColor(R.color.YOUR_TAB_BACKGROUND_COLOR) // 탭의 배경 색상
.tabIndicatorSelector(R.drawable.YOUR_TAB_INDICATOR_SELECTOR); // 탭의 인디케이터에 대한 Selector
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme);

✏️ 참고

필터 디자인 변경하기

Buzzvil SDK 5.9.x 버전에서는 필터의 커스터마이징 범위가 변경되었습니다. 아래 코드를 삭제하세요.

  • BuzzAdFeedThemefilterTextColorSelector()
  • BuzzAdFeedThemefilterBackgroundColorSelector()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final BuzzAdFeedTheme buzzAdFeedTheme =
BuzzAdFeedTheme.getDefault()
...생략...
.filterTextColorSelector(R.color.YOUR_TEXT_COLOR) // 필터의 텍스트 색상(state_selected 필수 적용)
.filterBackgroundColorSelector(R.color.YOUR_BACKGROUND_COLOR); // 필터의 배경 색상
BuzzAdFeed.setDefaultTheme(buzzAdFeedTheme);

✏️ 참고

CTA 버튼 디자인 변경하기 & 커스터마이징하기

Buzzvil SDK 5.9.x 버전에서는 CTA 버튼의 커스터마이징 범위가 변경되었습니다. 아래 코드를 삭제하세요.

  • BuzzAdFeedThemectaBackgroundSelector()
  • BuzzAdFeedThemectaTextColorSelector()
  • BuzzAdFeedThemectaTextSize()

CTA 버튼 배경 색상은 전체 테마의 주요 색상(Primary color)를 따릅니다. Primary 색상 변경을 위해 아래와 같이 색상 리소스를 추가하세요.

 중요
리소스 이름은 buzzvil_benefit_hub_brand_primary, buzzvil_benefit_hub_brand_primary_light를 그대로 사용해야 합니다.

✏️  참고
primary light 색상은 primary 색상에 투명도 60%를 적용한 값을 권장합니다. 예를 들어, primary 색상값이 #FF0000 이라면 primary light 색상값은 #99FF0000를 사용하세요.

<!-- res/values/colors.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="your_primary_color">#FF0000</color>
<color name="your_primary_light_color">#99FF0000</color>

<color name="buzzvil_benefit_hub_brand_primary">@color/your_primary_color</color>
<color name="buzzvil_benefit_hub_brand_primary_light">@color/your_primary_light_color</color>
</resources>

Buzzvil SDK에서 제공하는 UI 중 CTA 버튼, 팝 버튼, 유저 프로필 입력 배너 등의 아이콘을 변경할 수 있습니다.

다음은 BuzzAdThemerewardIcon를 추가해 리워드 아이콘을 변경하는 예시입니다. 각 속성 값에서 커스터마이징할 수 있는 UI에 대해서는 아래의 표를 참고하세요.

속성 값커스터마이징이 가능한 UI
rewardIcon
  • 모든 지면: CTA 뷰 리워드 아이콘
  • 베네핏허브: 팝 옵트인 버튼 아이콘
participatedIcon
  • 모든 지면: CTA 뷰

✏️  참고
테마를 변경하려면 BuzzvilSdk.initialize()을 호출해 Buzzvil SDK를 초기화하기 전에 BuzzAdTheme.setGloabalTheme()을 호출해야 합니다.

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

val buzzAdBenefitConfig = ...

// BuzzvilSdk.initialize()를 호출하기 전에 GlobalTheme을 설정합니다.
val buzzAdTheme = BuzzAdTheme()
.rewardIcon(R.drawable.your_reward_icon)
.participatedIcon(R.drawable.your_participated_icon)
BuzzAdTheme.setGlobalTheme(buzzAdTheme)

// Buzzvil SDK 초기화
BuzzvilSdk.initialize(...)
}
}

✏️ 참고

광고 참여 방식 변경하기 (커스텀 인앱 브라우저)

Buzzvil SDK 5.9.x 버전에서 변경된 기능이 없습니다.

✏️ 참고

네이티브 마이그레이션

Buzzvil SDK 5.9.x 버전부터 NativeAdView 연동 가이드가 더 이상 지원되지 않습니다. 네이티브 2.0 마이그레이션 가이드를 참고하여 NativeAd2View으로 마이그레이션하세요.

✏️ 참고

인터스티셜 마이그레이션

Buzzvil SDK 5.9.x 버전에서는 일부 커스터마이징 기능을 지원하지 않습니다. 아래 코드를 삭제하세요.

  • BuzzAdInterstitialThemetextColor()
  • BuzzAdInterstitialThemebackgroundColor()

✏️ 참고

팝 마이그레이션

포또(Potto)

Buzzvil SDK 5.9.x 버전에서는 인앱 팝 활성화를 위해 개발했던 포또(Potto)를 더 이상 지원하지 않습니다.

PopConfig가 Kotlin으로 변경됨

Buzzvil SDK 5.9.x 버전에서는 PopConfig가 Kotlin으로 변경되었습니다. 컴파일이 안 되는 경우 프로퍼티 접근 방식으로 변경하세요.

아래의 예시를 참고하세요.

변경 전(Java)변경 후(Kotlin)
popConfig.getFeedConfig()popConfig.feedConfig
popConfig.getPopExitUnitId()popConfig.popExitUnitId
popConfig.getPopControlServiceClass()popConfig.popControlServiceClass
popConfig.getPopUtilityLayoutHandlerClass()popConfig.popUtilityLayoutHandlerClass

커스텀 툴바 인터페이스 변경

피드

베네핏허브(피드)의 기본 형태가 바텀시트에서 전체 화면으로 변경되면서 베네핏허브에서는 더 이상 툴바를 지원하지 않습니다. 피드에서 사용하는 FeedToolbarHolder를 삭제하세요.

팝에서 사용하던 FeedConfig.Builder.feedToolbarHolderClass()PopConfig.Builder.popToolbarHolderClass()로 변경되었습니다.

val popFeedConfig: FeedConfig = FeedConfig.Builder("YOUR_POP_UNIT_ID")
.build()
val popConfig = PopConfig.Builder(popFeedConfig)
.popToolbarHolderClass(YourPopToolbarHolder.class)
.build()
참고 - 변경 전 코드(BuzzAd SDK v3.45)
/** 참고 - 변경 전 코드(BuzzAd SDK v3.45) **/

final FeedConfig popFeedConfig = new FeedConfig.Builder("YOUR_POP_UNIT_ID")
.feedToolbarHolderClass(YourPopToolbarHolder.class)
.build();
new PopConfig.Builder(popFeedConfig)
.build();

✏️ 참고

PopToolbarHolder 인터페이스에서 룰렛, 포또 관련 메서드가 삭제되었습니다. 아래 메서드가 포함된 커스텀 아이콘 구현을 삭제하세요.

  • onFeedInit
  • showRoulette
  • shouldShowPotto
  • showPotto

Deprecated 메서드가 삭제되었습니다. 다음을 참고하여 대체 메서드를 사용하세요.

  • showInquiry(final Context context, @NonNull final String unitId)를 삭제하고 showInquiry(context: Context)를 사용하세요.
  • showSettings(final Context context, @NonNull final String unitId)를 삭제하고 showSettings(context: Context)를 사용하세요.

푸시 마이그레이션

Buzzvil SDK 5.9.x 버전에서는 더 이상 광고 구독 알림 푸시를 지원하지 않습니다.

전체 테마 커스터마이징

Buzzvil SDK 5.9.x 버전에서는 일부 전체 테마 커스터마이징 기능을 지원하지 않습니다. 아래 코드를 삭제하세요.

  • Primary 색상 관련
    • BuzzAdFeedTheme.colorPrimaryDark()
    • BuzzAdFeedTheme.colorPrimary()
    • BuzzAdFeedTheme.colorPrimaryLight()
    • BuzzAdFeedTheme.colorPrimaryLighter()
    • BuzzAdFeedTheme.colorPrimaryLightest()
  • 피드 관련
    • BuzzAdFeedTheme.backgroundColor()
    • BuzzAdFeedTheme.separatorColor()
    • BuzzAdFeedTheme.separatorHeight()
    • BuzzAdFeedTheme.separatorHorizontalMargin()
  • 탭, 필터 관련
    • BuzzAdFeedTheme.tabTextColorSelector()
    • BuzzAdFeedTheme.tabBackgroundColor()
    • BuzzAdFeedTheme.tabIndicatorSelector()
    • BuzzAdFeedTheme.tabIndicatorColor()
    • BuzzAdFeedTheme.filterTextColorSelector()
    • BuzzAdFeedTheme.filterBackgroundColorSelector()
  • CTA 뷰 관련
    • BuzzAdFeedTheme.ctaBackgroundSelector()
    • BuzzAdFeedTheme.ctaTextColorSelector()
    • BuzzAdFeedTheme.ctaTextSize()

✏️  참고
새롭게 주요 색상(Primary color)을 설정하는 방법에 대해서는 커스터마이징 - 주요 색상을 참고하세요.