본문으로 건너뛰기

고급 설정

이 페이지에서는 BuzzAd iOS용 SDK의 네이티브 지면에서 구현할 수 있는 기능을 확인할 수 있습니다.

CTA 버튼 자체 구현하기

BuzzAd iOS용 SDK에서 기본으로 제공하는 UI를 사용하지 않고 CTA 버튼을 직접 구현할 수 있습니다.

CTA 버튼을 직접 구현하려면 다음의 절차를 따르세요.

  1. CtaViewProtocol 프로토콜을 준수하는 UIView 클래스의 서브클래스를 생성하세요. 다음은 UIStackView를 활용하여 CTA View 클래스를 생성한 예시입니다.
import UIKit
import BuzzAdBenefit

final class CustomCtaView: UIStackView, BZVCtaViewProtocol {
let rewardImageView = UIImageView(frame: .zero)
let rewardLabel = UILabel(frame: .zero)
let ctaLabel = UILabel(frame: .zero)

required init(coder: NSCoder) {
super.init(coder: coder)
setUpView()
}

override init(frame: CGRect) {
super.init(frame: frame)
setUpView()
}

private func setUpView() {
addArrangedSubview(rewardImageView)
addArrangedSubview(rewardLabel)
addArrangedSubview(ctaLabel)
}

// MARK: BZVCtaViewProtocol
func renderRewardNotAvailableViewState(withCtaText ctaText: String) {
// 리워드가 없는 광고에 대한 CTA 뷰 레이아웃을 정의합니다.
rewardImageView.isHidden = true
rewardLabel.isHidden = true
ctaLabel.text = ctaText
}

func renderRewardAvailableViewState(withCtaText ctaText: String, reward: Int) {
// 리워드가 있는 광고에 대한 CTA 뷰 레이아웃을 정의합니다.
rewardImageView.isHidden = false
rewardLabel.isHidden = false

rewardImageView.image = UIImage(named: "YOUR_REWARD_IMAGE")
rewardLabel.text = "+\(reward)"
ctaLabel.text = ctaText
}

func renderParticipatingViewState(withCtaText ctaText: String) {
// 참여 확인 중인 광고에 대한 CTA 뷰 레이아웃을 정의합니다.
rewardImageView.isHidden = true
rewardLabel.isHidden = true
ctaLabel.text = "YOUR_PARTICIPATING_TEXT"
}

func renderParticipatedViewState(withCtaText ctaText: String) {
// 참여 완료한 광고에 대한 CTA 뷰 레이아웃을 정의합니다.
rewardImageView.isHidden = false
rewardLabel.isHidden = true

rewardImageView.image = UIImage(named: "YOUR_PARTICIPATED_IMAGE")
ctaLabel.text = "YOUR_PARTICIPATED_TEXT"
}
}
  1. NativeAdViewBinder 에서 CustomCtaView를 사용하여 광고 데이터를 바인딩하세요.
import UIKit
import BuzzAdBenefit

final class ViewController: UIViewController {
...생략...
// 이전 단계에서 정의한 CustomCtaView CTA View를 생성합니다.
let ctaView = CustomCtaView(frame: .zero)
lazy var viewBinder = BZVNativeAdViewBinder { builder in
...생략...
builder.ctaView = self.ctaView
}


override func viewDidLoad() {
...생략...
nativeAdView.addSubview(ctaView)
}

private func renderAd(_ ad: BZVNativeAd) {
// 광고 데이터를 바인딩합니다.
viewBinder.bind(with: ad)
}
}

한 번에 여러 개의 광고 로드하기

한 번의 광고 요청으로 여러 개의 광고를 할당받을 수 있습니다. 최대 10개까지 가능하며, 추가로 광고를 할당받으려면 버즈빌 담당자에게 문의하세요.

다음은 NATIVE_ADS_COUNT를 지정하여 여러 개의 광고를 할당받는 예시입니다.

let adsRequest = BZVNativeAdsRequest { builder in
builder.adCount = NSNumber(value: NATIVE_ADS_COUNT) // 한 번에 로드할 광고 개수를 설정합니다.
}

let buzzAdNative = BZVBuzzAdNative(unitId: "YOUR_NATIVE_UNIT_ID")
buzzAdNative.loadAds(with: adsRequest) { nativeAds in
// 광고 할당이 성공하면 호출됩니다.
} onFailure: { error in
// 할당된 광고가 없으면 호출됩니다.
print("Failed to load native ads")
}

광고 이벤트 리스너 등록하기

✏️  참고
광고 참여 상태에 따라 CTA View를 변경하기 위해 이벤트 리스너를 사용했다면, 더 이상 사용할 필요 없습니다.

BZVNativeAdEventDelegate를 통해 광고 콜백 이벤트를 수신할 수 있습니다. 광고 콜백 이벤트를 수신하려면 [NativeAdViewBinder bindWithNativeAd] 함수를 호출한 후에 리스너를 등록해야 합니다.

다음은 BZVNativeAd에 광고 이벤트 리스너를 등록하는 예시입니다.

import UIKit
import BuzzAdBenefit

final class ViewController: UIViewController, BZVNativeAdEventDelegate {

private func renderAd(_ ad: BZVNativeAd) {
viewBinder.bind(with: ad)

// Optional: Native 광고 이벤트 처리를 위한 delegate을 등록하고 각 이벤트에 따라 필요한 기능을 구현합니다.
// 주의: 반드시 bind 함수를 호출한 이후에 리스너 등록을 해야합니다.
ad.add(self)
}

// MARK: BZVNativeAdEventDelegate
func didImpress(_ nativeAd: BZVNativeAd) {
// Native 광고가 유저에게 노출되었을 때 호출됩니다.
}

func didClick(_ nativeAd: BZVNativeAd) {
// 유저가 Native 광고를 클릭했을 때 호출됩니다.
}

func didRequestReward(for nativeAd: BZVNativeAd) {
// 리워드 적립 요청시에 호출됩니다.
}

func didReward(for nativeAd: BZVNativeAd, with result: BZVRewardResult) {
// 리워드 적립의 결과를 수신했을 때 호출됩니다.
}

func didParticipateAd(_ nativeAd: BZVNativeAd) {
// 광고 참여가 완료되었을 때 호출됩니다.
}
}

동영상 광고 리스너 동록하기

동영상 광고에서 발생하는 콜백 이벤트를 수신할 수 있습니다.

다음은 BZVNativeAdView에 동영상 광고 이벤트 리스너를 등록하는 예시입니다.

import BuzzAdBenefit

final class ViewController: UIViewController, BZVNativeAdViewVideoDelegate {
let nativeAdView = BZVNativeAdView(frame: .zero)
...생략...

override func viewDidLoad() {
...생략...
nativeAdView.videoDelegate = self
}

// MARK: BZVNativeAdViewVideoDelegate
func bzvNativeAdView(_ nativeAdView: BZVNativeAdView, willStartPlayingVideoAd nativeAd: BZVNativeAd) {
}

func bzvNativeAdView(_ nativeAdView: BZVNativeAdView, didResumeVideoAd nativeAd: BZVNativeAd) {
}

func bzvNativeAdView(_ nativeAdView: BZVNativeAdView, willReplayVideoAd nativeAd: BZVNativeAd) {
}

func bzvNativeAdView(_ nativeAdView: BZVNativeAdView, didPauseVideoAd nativeAd: BZVNativeAd) {
}

func bzvNativeAdView(_ nativeAdView: BZVNativeAdView, didFinishPlayingVideoAd nativeAd: BZVNativeAd) {
}
}