Info |
---|
Pop 기능을 사용하려면 initialize 을 반드시 Application.onCreate 에서 해야합니다. |
BuzzvilSdk 는 기본적으로 Application.onCreate 에서 initialize 하도록 가이드되고 있습니다. 다만 다음과 가이드하고 있지만 다음 코드를 앱에 적용하면 초기화 시점을 변경하여 원하는 시점에 BuzzvilSdk 를 초기화하여 사용할 수 있습니다.
필요한 시점에 초기화하는 방식은 기본적으로 다음과 같은 형태로 동작합니다.
BuzzvilSdk 기능을 사용하기 전에 Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화 후 사용합니다.
유저 프로필 설정 샘플코드
Code Block |
---|
/** * 유저 프로필 설정 * 1. Buzzvil SDK 초기화 상태를 확인하여 초기화되지 않았다면 BuzzvilSdk.initialize를 호출하여 초기화합니다. * 2. BuzzvilSdk.setUserProfile을 호출하여 유저 프로필을 설정합니다. */ binding.buttonPublisherLogin.setOnClickListener { initIfNeeded() setUserProfile() } |
베네핏 허브 열기 샘플코드
Code Block |
---|
/** * 베네핏 허브 열기 * 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: IllegalStateExceptionException) { Log.d(TAG, "buttonPublisherShowHub - Failure. exception: $e") e.printStackTrace() } } |
setUserProfile()
유저 프로필을 설정합니다.
호출 시점: 앱에서 유저 프로필이 변경될 때 (로그인, 로그아웃 등)
...
Code Block |
---|
/** * 유저 프로필 설정 */ 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를 호출하여 초기화합니다.
...
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()
를 사용하는 코드를 다음과 같이 변경합니다.
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 | ||
---|---|---|
|
...