Skip to content
:docs

Migration

Learn how to migrate an existing Native (BZVNativeAdView) integration to Native 2.0 (BZVNativeAd2View).

Basic settings

Key changes

  • Use BZVNativeAd2View instead of BZVNativeAdView in the ad layout.
  • Native 2.0 automatically allocates and refreshes ads within the SDK, so the allocation classes BZVBuzzAdNative and BZVNativeAdRequest are no longer needed.
  • Use BZVNativeAd2ViewBinder instead of BZVNativeAdViewBinder.
    • The Unit ID previously supplied when creating BZVBuzzAdNative is now supplied when creating BZVNativeAd2ViewBinder.
    • In Swift, you can now use a nested builder class to create BZVNativeAd2ViewBinder.

Replacement methods

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

Original Native example

Swift
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)
  }
}

Native 2.0 example

Swift
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()
  }
}

Advanced settings

Key changes

  • Receive BZVNativeAd2 as a parameter instead of BZVNativeAd to access ad information.
  • Receive ad events through BZVNativeAd2ViewBinder.subscribeAdEvents() instead of BZVNativeAdEventDelegate.

Original Native example

Swift
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를 통해 광고에 대한 정보를 가져올 수 있습니다.
  }
}

Native 2.0 example

Swift
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()
  }
}