/
BuzzvilSdk V5 initialize 시점 변경 가이드
BuzzvilSdk V5 initialize 시점 변경 가이드
BuzzvilSdk. 5.27.5 버전 부터 사용가능합니다.
BuzzAdBenefit Pop 기능을 사용하려면 initialize 을 반드시 Application.onCreate 에서 해야합니다.
BuzzvilSdk 에서 다음 코드를 앱에 적용하면 원하는 시점에 BuzzvilSdk 를 초기화하여 사용할 수 있습니다.
필요한 시점에 초기화하는 방식은 기본적으로 다음과 같은 형태로 동작합니다.
BuzzvilSdk 기능을 사용하기 전에 Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화 후 사용합니다.
initialize 시점 변경 방법
1. 유저 프로필 설정 코드 변경
/**
* 유저 프로필 설정
* 1. Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다.
* 2. BuzzvilSdk.setUserProfile을 호출하여 유저 프로필을 설정합니다.
*/
binding.buttonPublisherLogin.setOnClickListener {
initIfNeeded()
setUserProfile()
}
2. 베네핏 허브 열기 코드 변경
/**
* 베네핏 허브 열기
* 1. Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다.
* 2. BuzzAdFeed를 생성하여 show를 호출하여 허브를 엽니다.
* 3. try-catch를 사용하여 BuzzAdFeed 를 사용할 수 없는 상태에 대한 Exception을 처리합니다.
*/
binding.buttonPublisherShowHub.setOnClickListener {
initIfNeeded()
try {
Log.d(TAG, "buttonPublisherShowHub - Success. Buzzvil SDK is initialized.")
val buzzAdFeed = BuzzAdFeed.Builder().build()
buzzAdFeed.show(this)
} catch (e: Exception) {
Log.d(TAG, "buttonPublisherShowHub - Failure. exception: $e")
e.printStackTrace()
}
}
setUserProfile() 샘플
유저 프로필을 설정합니다.
호출 시점: 앱에서 유저 프로필이 변경될 때 (로그인, 로그아웃 등)
참고: 연동문서 유저 프로필 등록하기
/**
* 유저 프로필 설정
*/
private fun setUserProfile() {
Log.d(TAG, "setUserProfile")
// Set user profile
BuzzvilSdk.setUserProfile(
userId = "test_user_id",
gender = UserProfile.Gender.MALE,
birthYear = 1990,
)
}
initIfNeeded() 샘플
Buzzvil SDK가 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다.
호출 시점 Buzzvil 코드를 사용하기 전에 호출
/**
* Buzzvil SDK 초기화
* Buzzvil SDK가 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다.
*/
private fun initIfNeeded() {
// Initialize Buzzvil SDK
if (BuzzvilSdk.isInitialized) {
Log.d(TAG, "initIfNeeded - Buzzvil SDK is already initialized.")
} else {
Log.d(TAG, "initIfNeeded - Initialize Buzzvil SDK.")
val buzzAdBenefitConfig = BuzzAdBenefitConfig.Builder(SAMPLE_BENEFIT_APP_ID)
val feedConfigBuilder = FeedConfig.Builder(SAMPLE_BENEFIT_FEED_UNIT_ID)
buzzAdBenefitConfig.setDefaultFeedConfig(feedConfigBuilder.build())
BuzzvilSdk.initialize(
application,
buzzAdBenefitConfig.build()
)
}
}
3. 네이티브 광고 로드 및 표시 (NativeAd2)
네이티브 광고를 사용하는 경우 NativeAd2ViewBinder.Builder()
를 사용하는 코드를 다음과 같이 변경합니다.
/**
* 네이티브 광고 로드 및 표시
* 1. Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다.
* 2. 유저 프로필이 설정되어 있지 않다면 광고를 로드하지 않고 리턴합니다.
* 3. NativeAd2ViewBinder.Builder() 를 통해 광고 레이아웃을 설정합니다.
* 4. try-catch를 사용하여 NativeAd2ViewBinder 를 사용할 수 없는 상태에 대한 Exception을 처리합니다.
*/
private fun loadNativeAd(nativeAdUnitId: String) {
initIfNeeded()
if (!BuzzvilSdk.isUserProfileSet) {
Log.d(TAG, "User profile is not set")
return
}
// 광고 레이아웃을 설정합니다.
val binder = try {
NativeAd2ViewBinder.Builder()
.nativeAd2View(binding.customNativeAd2View)
.mediaView(binding.mediaView)
.titleTextView(binding.textTitle)
.descriptionTextView(binding.textDescription)
.iconImageView(binding.imageIcon)
.ctaView(binding.ctaView)
.nativeOverlayViewLayout(binding.customNativeOverlayLayout)
.build(nativeAdUnitId)
} catch (e: Exception) {
Log.e(TAG, "Failed to create NativeAd2ViewBinder", e)
return
}
// (Optional) 광고 요청 상태에 따른 UI를 구현합니다.
binder.addNativeAd2StateChangedListener(object : NativeAd2StateChangedListener {
override fun onRequested() {
// 광고 할당을 요청한 상태입니다.
// 이후에는 onNext(), onComplete(), onError() 중 하나가 호출됩니다.
// 광고 자동 갱신을 시도할 때마다 반복적으로 호출됩니다.
// 로딩 화면 등을 구현할 수 있습니다.
Log.d(TAG, "[state] onRequested 광고 할당 요청 중")
}
override fun onNext(nativeAd2: NativeAd2) {
// 광고 할당에 성공하면 호출됩니다.
// 이후에 광고 갱신 시 onRequested()가 다시 호출됩니다.
// 광고 자동 갱신을 성공할 때마다 반복적으로 호출됩니다.
// 로딩 화면 등을 구현한 경우, 여기에서 로딩을 종료합니다.
binding.customNativeAd2View.visibility = View.VISIBLE
binding.nativeToFeedLayout.visibility = View.VISIBLE
Log.d(TAG, "[state] onNext 광고 할당 성공")
}
override fun onComplete() {
// 더 이상 갱신할 수 있는 광고가 없을 때 호출됩니다.
// 로딩 화면 등을 구현한 경우, 여기에서 로딩을 종료합니다.
binding.customNativeAd2View.visibility = View.VISIBLE
binding.nativeToFeedLayout.visibility = View.VISIBLE
Log.d(TAG, "[state] onComplete 더 이상 할당 받을 수 있는 광고 없음")
}
override fun onError(adError: AdError) {
// 최초 광고 할당에 실패하면 호출됩니다.
// 로딩 화면 등을 구현한 경우, 여기에서 로딩을 종료합니다.
Log.d(TAG, "[state] onError 광고 할당 실패: ${adError.adErrorType.name}")
}
})
// (Optional) 광고 이벤트 리스너를 등록합니다.
binder.addNativeAd2EventListener(object : NativeAd2EventListener {
override fun onImpressed(nativeAd2: NativeAd2) {
// Native 광고가 유저에게 노출되었을 때 호출됩니다.
Log.d(TAG, "[event] onImpressed")
}
override fun onClicked(nativeAd2: NativeAd2) {
// 유저가 Native 광고를 클릭했을 때 호출됩니다.
Log.d(TAG, "[event] onClicked")
}
override fun onRewardRequested(nativeAd2: NativeAd2) {
// 리워드 적립을 요청했을 때 호출됩니다.
Log.d(TAG, "[event] onRewardRequested")
}
override fun onParticipated(nativeAd2: NativeAd2) {
// 유저가 광고 참여를 완료하였을 때 호출됩니다.
Log.d(TAG, "[event] onParticipated")
}
override fun onRewarded(nativeAd2: NativeAd2, rewardResult: RewardResult) {
// 리워드가 적립되었을 때 호출됩니다.
Log.d(TAG, "[event] onRewarded. rewardResult: ${rewardResult.name}")
}
})
// 광고 할당 및 표시를 자동으로 수행합니다.
binder.bind()
}
샘플 코드 첨부
, multiple selections available,