본문으로 건너뛰기

마이그레이션

이 페이지에서는 기존 네이티브(BZVNativeAdView)를 연동한 상태에서 네이티브 2.0(BZVNativeAd2View)으로 마이그레이션 하는 방법을 안내합니다.

기본 설정

주요 변경 내역

  • 광고 레이아웃에서 BZVNativeAdView 대신 BZVNativeAd2View를 사용합니다.
  • 네이티브 2.0에서는 광고 할당 및 갱신을 SDK 내부에서 자동으로 수행합니다. 따라서 광고 할당을 위한 클래스인 BZVBuzzAdNative, BZVNativeAdRequest를 사용할 필요가 없습니다.
  • BZVNativeAdViewBinder 대신 BZVNativeAd2ViewBinder를 사용합니다.
    • 기존에 BZVBuzzAdNative를 생성할 때 추가하였던 Unit ID는 BZVNativeAd2ViewBinder 생성 과정에서 추가합니다.
    • Swift의 경우 기존과 달리 nested builder class를 사용하여 BZVNativeAd2ViewBinder를 생성하는 방식을 사용할 수 있습니다.

대체 메서드

네이티브네이티브 2.0
BZVBuzzAdNative.loadAd(
with: BZVNativeAdRequest,
onSuccess: (BZVNativeAd) -> Void,
onFailure: (NSError) -> Void)
)
BZVNativeAd2ViewBinder.subscribeEvents(
onRequest: () -> Void,
onNext: (BZVNativeAd2) -> Void,
onError: (NSError) -> Void,
onCompleted: () -> Void
)
BZVNativeAd2ViewBinder.bind()

기존 네이티브 구현 예시

import UIKit
import BuzzAdBenefit

final class ViewController: UIViewController {
// BZVNativeAdView 대신 BZVNativeAd2View를 사용합니다.
private let nativeAdView = BZVNativeAdView(frame: .zero)
// BZVMedaiView, BZVCtaView 등 다른 컴포넌트는 그대로 사용할 수 있습니다.
private let mediaView = BZVMediaView(frame: .zero)
private let iconImageView = UIImageView(frame: .zero)
private let titleLabel = UILabel(frame: .zero)
private let descriptionLabel = UILabel(frame: .zero)
private let ctaView = BZVDefaultCtaView(frame: .zero)

// BZVNativeAdViewBinder 대신 BZVNativeAd2ViewBinder를 사용합니다.
private lazy var viewBinder = BZVNativeAdViewBinder { builder in
// Swift의 경우 nested builder class를 사용할 수 있습니다.
// Builder의 생성 과정에서 Unit ID를 추가합니다.
builder.nativeAdView = self.nativeAdView
builder.mediaView = self.mediaView
builder.iconImageView = self.iconImageView
builder.titleLabel = self.titleLabel
builder.descriptionLabel = self.descriptionLabel
builder.ctaView = self.ctaView
}

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(nativeAdView)
nativeAdView.addSubview(mediaView)
nativeAdView.addSubview(iconImageView)
nativeAdView.addSubview(titleLabel)
nativeAdView.addSubview(descriptionLabel)
nativeAdView.addSubview(ctaView)

// AutoLayout Constraints 설정
// ...

// BZVNativeAdRequest, BZVBuzzAdNative를 삭제합니다.
let nativeAdRequest = BZVNativeAdRequest()
let buzzAdNative = BZVBuzzAdNative(unitId: "YOUR_NATIVE_UNIT_ID")
buzzAdNative.loadAd(with: nativeAdRequest) { nativeAd in
// BZVNativeAd2ViewBinder.subscribeEvents(onNext:)로 작업을 옮깁니다.
self.renderAd(nativeAd)
} onFailure: { error in
// BZVNativeAd2ViewBinder.bind(onError:)로 작업을 옮깁니다.
print("Failed to load a native ad")
}
}

// renderAd 함수를 제거합니다.
func renderAd(_ ad: BZVNativeAd) {
viewBinder.bind(with: ad)
}
}

네이티브 2.0 구현 예시

import UIKit
import BuzzAdBenefit

final class ViewController: UIViewController {
// BZVNativeAdView 대신 BZVNativeAd2View를 사용합니다.
private let nativeAd2View = BZVNativeAd2View(frame: .zero)
// BZVMedaiView, BZVCtaView 등 다른 컴포넌트는 그대로 사용할 수 있습니다.
private let mediaView = BZVMediaView(frame: .zero)
private let iconImageView = UIImageView(frame: .zero)
private let titleLabel = UILabel(frame: .zero)
private let descriptionLabel = UILabel(frame: .zero)
private let ctaView = BZVDefaultCtaView(frame: .zero)

// BZVNativeAdViewBinder 대신 BZVNativeAd2ViewBinder를 사용합니다.
private lazy var viewBinder = BZVNativeAd2ViewBinder
// Swift의 경우 nested builder class를 사용할 수 있습니다.
// Builder의 생성 과정에서 Unit ID를 추가합니다.
.Builder(unitId: "YOUR_NATIVE_UNIT_ID")
.nativeAd2View(nativeAd2View)
.mediaView(mediaView)
.iconImageView(iconImageView)
.titleLabel(titleLabel)
.descriptionLabel(descriptionLabel)
.ctaView(ctaView)
.build()

override func viewDidLoad() {
super.viewDidLoad()

self.view.addSubview(nativeAd2View)
nativeAd2View.addSubview(mediaView)
nativeAd2View.addSubview(iconImageView)
nativeAd2View.addSubview(titleLabel)
nativeAd2View.addSubview(descriptionLabel)
nativeAd2View.addSubview(ctaView)

// AutoLayout Constraints 설정
// ...

// BZVNativeAdRequest, BZVBuzzAdNative를 삭제합니다.

viewBinder.subscribeEvents(onNext: { [weak self] nativeAd2 in
// BZVNativeAd2ViewBinder.subscribeEvents(onNext:)로 작업을 옮깁니다.
}, onError: { [weak self] error in
// BZVNativeAd2ViewBinder.bind(onError:)로 작업을 옮깁니다.
})

viewBinder.bind()
}
}

고급 설정

주요 변경사항

  • BZVNativeAd 대신 BZVNativeAd2를 매개 변수로 받아서 광고 정보를 가져옵니다.
  • BZVNativeAdEventDelegate 대신 BZVNativeAd2ViewBinder.subscribeAdEvents()를 통해 광고 이벤트를 수신합니다.

기존 네이티브 구현 예시

final class ViewController: UIViewController {
// ...생략...

private func renderAd(_ ad: BZVNativeAd) {
viewBinder.bind(with: ad)
// bind() 함수 이전에 subscribeAdEvents() 함수를 호출합니다.
// BZVNativeAd 대신 NativeAd2ViewBinder에서 subscribeAdEvents() 함수를 호출합니다.
ad.delegate = self
}
}

// Delegate을 채택하는 방식 대신, subscribeAdEvents()에서 closure를 통해 이벤트를 수신합니다.
extension ViewController: BZVNativeAdEventDelegate {
func didImpress(_ nativeAd: BZVNativeAd) {
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}

func didClick(_ nativeAd: BZVNativeAd) {
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}

func didRequestReward(for nativeAd: BZVNativeAd) {
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}

func didReward(for nativeAd: BZVNativeAd, with result: BZVRewardResult) {
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}

func didParticipateAd(_ nativeAd: BZVNativeAd) {
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}
}

네이티브 2.0 구현 예시

final class ViewController: UIViewController {
// ...생략...

override func viewDidLoad() {
// BZVNativeAd 대신 NativeAd2ViewBinder에서 subscribeAdEvents() 함수를 호출합니다.
// Delegate을 채택하는 방식 대신, subscribeAdEvents()에서 closure를 통해 이벤트를 수신합니다.
// 로그 기록, 단순 알림 외에 다른 동작을 추가하는 것을 권장하지 않습니다. 직접 구현한 동작이 네이티브에서 제공하는 기능(광고 자동 갱신 등)과 충돌할 수 있습니다.
viewBinder.subscribeAdEvents(onImpressed: { [weak self] nativeAd2 in
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}, onClicked: { [weak self] nativeAd2 in
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}, onRewardRequested: { [weak self] nativeAd2 in
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}, onRewarded: { [weak self] nativeAd2, rewardResult in
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
}, onParticipated: { [weak self] nativeAd2 in
// BZVNativeAd 대신 BZVNativeAd2를 통해 광고에 대한 정보를 가져올 수 있습니다.
})

// bind() 함수 이전에 subscribeAdEvents() 함수를 호출합니다.
viewBinder.bind()
}
}