...
Code Block |
---|
/**
* 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()
)
}
} |
네이티브 광고 로드 및 표시 (NativeAd2)
네이티브 광고를 사용하는 경우 NativeAd2ViewBinder.Builder()
를 사용하는 코드를 다음과 같이 변경합니다.
참고: 연동문서 Buzzvil SDK 초기화하기
Code Block |
---|
/**
* 네이티브 광고 로드 및 표시
* 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()
} |
테스트 코드 첨부
View file |
---|
name | PublisherMainActivity.kt |
---|
|
...