목차
개요
이 장에서는 BuzzAd iOS용 SDK 버전을 3.0으로 업데이트하기 위해 필요한 Native 지면의 설정을 안내합니다.
주요 변경 사항
BuzzAd iOS용 SDK의 공통 변경 사항 및 아래의 사항이 변경되었습니다.
Native 지면 클래스
BABAdLoader
를BZVBuzzAdNative
로 변경했습니다.광고를 표시할 때 광고 데이터를 자동으로 바인딩하는 기능을 추가했습니다.
광고 요청에 대한 응답으로
BABAd
객체 대신BZVNativeAd
를 반환하도록 변경했습니다.BZVNativeAd
객체는 광고를 보여주기 위해 필요한 정보 이외에 불필요한 정보를 포함하지 않습니다.BZVCtaViewProtocol
을 준수하는 클래스를 사용하여 CTA 버튼을 자체 구현하도록 변경했습니다.
Native 기본 설정
광고 레이아웃 구성하기
BuzzAd iOS용 SDK 3.0에서는 BABNativeAdView
, BABMediaView
를 각각 BZVNativeAdView
와 BZVMediaView
로 변경했습니다.
Native 광고 레이아웃을 구성하려면 기존의 BABNativeAdView
와 BABMediaView
를 각각 BZVNativeAdView
와 BZVMediaView
로 변경하세요.
Objective-C
2.x (변경 전)
@import BuzzAdBenefit; @interface ViewController () @property (nonatomic, strong, readonly) BABNativeAdView *nativeAdView; @property (nonatomic, strong, readonly) BABMediaView *mediaView; ...생략... @end
3.x (변경 후)
@import BuzzAdBenefit; @interface ViewController () @property (nonatomic, strong, readonly) BZVNativeAdView *nativeAdView; @property (nonatomic, strong, readonly) BZVMediaView *mediaView; ...생략... @end
Swift
2.x (변경 전)
import BuzzAdBenefit final class ViewController: UIViewController { let nativeAdView = BABNativeAdView(frame: .zero) let mediaView = BABMediaView(frame: .zero) ...생략... }
3.x (변경 후)
import BuzzAdBenefit final class ViewController: UIViewController { let nativeAdView = BZVNativeAdView(frame: .zero) let mediaView = BZVMediaView(frame: .zero) ...생략... }
광고 할당 및 표시하기
BuzzAd iOS용 SDK 3.0에서는 BABAdLoader
클래스를 BZVBuzzAdNative
로 변경하고 광고를 표시할 때 광고 데이터를 자동으로 바인딩하는 기능을 제공합니다. 또한, 광고 요청에 대한 응답으로 BABAd
객체 대신 BZVNativeAd
를 반환하도록 변경했습니다.
Native 광고를 할당받고 표시하려면 아래의 순서대로 기존 코드를 수정하세요.
BABAdLoader
클래스를 삭제하세요.빌더 블록을 이용해
BZVBuzzAdNative
를 생성하세요.BZVNativeAdRequest
데이터 객체를 생성해[BZVBuzzAdNative loadAdWithAdRequest:]
를 호출하세요.renderAd
함수에서 광고 데이터를 수동으로 바인딩하는 코드를 삭제하고BZVNativeAdViewBinder
를 사용하여 자동으로 바인딩하세요.
Objective-C
2.x (변경 전)
@implementation ViewController - (void)viewDidLoad { ...생략... BABAdLoader *adLoader = [[BABAdLoader alloc] initWithUnitId:@"YOUR_NATIVE_UNIT_ID"]; [adLoader loadAdWithOnSuccess:^(BABAd * _Nonnull ad) { // 할당된 광고가 있으면 호출됩니다. // 광고 데이터를 바인딩합니다. [self renderAd:ad]; } onFailure:^(NSError * _Nullable error) { // 할당된 광고가 없으면 호출됩니다. NSLog(@"Failed to load a native ad"); }]; } - (void)renderAd(BABAd *ad) { // (1) Ad 의 각 요소를 세팅합니다. _titleLabel.text = ad.creative.title; _descriptionLabel.text = ad.creative.body; [_iconImageView sd_setImageWithURL:[NSURL URLWithString:ad.creative.iconUrl]]; _ctaLabel.text = [NSString stringWithFormat:@"+%d %@", (int)ad.reward, ad.creative.callToAction]; [_rewardIcon setImage:[UIImage imageNamed:@"point_icon"]]; // (2) NativeAdView 에 다음의 항목을 추가합니다. _adView.ad = ad; _adView.mediaView = _mediaView; // (3) 광고 클릭이 가능한 영역을 지정합니다. _adView.clickableViews = @[_ctaButton, _iconImageView]; }
3.x (변경 후)
@implementation ViewController - (void)viewDidLoad { ...생략... BZVNativeAdRequest *adRequest = [[BZVNativeAdRequest alloc] init]; BZVBuzzAdNative *buzzAdNative = [BZVBuzzAdNative nativeWithUnitId:@"YOUR_NATIVE_UNIT_ID"]; [buzzAdNative loadAdWithAdRequest:adRequest onSuccess:^(BZVNativeAd * _Nonnull nativeAd) { // 할당된 광고가 있으면 호출됩니다. // 광고 데이터를 바인딩합니다. [self renderAd:nativeAd]; } onFailure:^(BZVError * _Nonnull error) { // 할당된 광고가 없으면 호출됩니다. NSLog(@"Failed to load a native ad"); }]; } - (void)renderAd:(BZVNativeAd *)ad { BZVNativeAdViewBinder *viewBinder = [BZVNativeAdViewBinder viewBinderWithBlock:^(BZVNativeAdViewBinderBuilder * _Nonnull builder) { builder.nativeAdView = self.nativeAdView; builder.mediaView = self.mediaView; builder.iconImageView = self.iconImageView; builder.titleLabel = self.titleLabel; builder.descriptionLabel = self.descriptionLabel; builder.ctaView = self.ctaView; }]; [viewBinder bindWithNativeAd:ad]; } @end
Swift
2.x (변경 전)
final class ViewController: UIViewController { override func viewDidLoad() { ...생략... let adLoader = BABAdLoader(unitId: "YOUR_NATIVE_UNIT_ID") adLoader.loadAdWith(onSuccess: { ad in // 할당된 광고가 있으면 호출됩니다. // 광고 데이터를 바인딩합니다. self.renderAd(ad: ad) }, onFailure: { error in // 할당된 광고가 없으면 호출됩니다. print("Failed to load a native ad") }) } func renderAd(ad: BABAd) { // (1) Ad 의 각 요소를 세팅합니다. self.titleLabel.text = ad.creative.title self.descriptionLabel.text = ad.creative.body if let urlString = ad.creative.iconUrl { self.iconImageView.sd_setImage(with: URL(string: urlString)) } self.ctaLabel.text = "\(Int(ad.reward))P \(ad.creative.callToAction ?? "디폴트 스트링")" self.rewardIcon.image = UIImage(named: "point_icon") // (2) NativeAdView 에 다음의 항목을 추가합니다. self.adView.ad = ad self.adView.mediaView = self.mediaView // (3) 광고 클릭이 가능한 영역을 지정합니다. self.adView.clickableViews = [self.ctaButton, self.iconImageView] } }
3.x (변경 후)
final class ViewController: UIViewController { override func viewDidLoad() { ...생략... let nativeAdRequest = BZVNativeAdRequest() let buzzAdNative = BZVBuzzAdNative(unitId: "YOUR_NATIVE_UNIT_ID") buzzAdNative.loadAd(with: nativeAdRequest) { nativeAd in // 할당된 광고가 있으면 호출됩니다. // 광고 데이터를 바인딩합니다. self.renderAd(nativeAd) } onFailure: { error in // 할당된 광고가 없으면 호출됩니다. print("Failed to load a native ad") } } func renderAd(_ ad: BZVNativeAd) { let viewBinder = BZVNativeAdViewBinder { builder in builder.nativeAdView = self.nativeAdView builder.mediaView = self.mediaView builder.iconImageView = self.iconImageView builder.titleLabel = self.titleLabel builder.ctaView = self.ctaView } viewBinder.bind(with: ad) } }
Native 고급 설정
CTA 버튼 자체 구현하기
BuzzAd iOS용 SDK 3.0에서는 CTA 버튼을 자체 구현할 때 사용할 수 있는 BZVCtaViewProtocol
을 제공합니다. BZVCtaViewProtocol
을 준수하는 클래스는 광고 데이터를 바인딩할 때 BZVNativeAdViewBinder
의 ctaView
인자로 설정할 수 있으며 자동으로 CTA 버튼의 상태에 따라 UI가 업데이트 됩니다.
CTA 버튼을 자체 구현하려면 아래의 순서대로 기존 코드를 수정하세요.
광고 레이아웃을 구성하는 클래스의
updateCtaButtonWithAd
함수에서 CTA 뷰의 UI를 업데이트하는 코드를 삭제하세요.BABNativeAdViewDelegate
의 콜백에서updateCtaButtonWithAd
함수를 호출하는 코드를 삭제하세요.CtaViewProtocol
을 준수하는UIView
클래스의 서브클래스를 생성하세요.광고 레이아웃을 구성하는 클래스에서 이전 단계에서 생성한 CTA 버튼 클래스를 사용하세요.
광고 데이터를 바인딩할 때
ctaView
인자로 자체 구현한 CTA 버튼을 설정하세요.
Objective-C
2.x (변경 전)
@import UIKit; @import BuzzAdBenefit; @interface ViewController () <BABNativeAdViewDelegate> @property (nonatomic, strong, readonly) BABNativeAdView *nativeAdView; @property (nonatomic, strong, readonly) BABMediaView *mediaView; @property (nonatomic, strong, readonly) UIImageView *iconImageView; @property (nonatomic, strong, readonly) UILabel *titleLabel; @property (nonatomic, strong, readonly) UILabel *descriptionLabel; @property (nonatomic, strong, readonly) UIImageView *rewardIcon; @property (nonatomic, strong, readonly) UILabel *ctaLabel; @end @implementation ViewController ...생략... - (void)renderAd:(BABAd *)ad { [super renderAd:ad]; self.titleLabel.text = ad.creative.title; self.descriptionLabel.text = ad.creative.body; [self.iconImageView sd_setImageWithURL:[NSURL URLWithString:ad.creative.iconUrl]]; self.adView.ad = ad; self.adView.mediaView = self.mediaView; self.adView.clickableViews = @[self.ctaButton, self.iconImageView]; [self updateCtaButtonWithAd:ad]; } - (void)updateCtaButtonWithAd:(BABAd *)ad { NSString *callToAction = ad.creative.callToAction; double reward = [ad getAvailableReward]; double totalReward = [ad getTotalReward]; BOOL isParticipated = [ad isParticipated]; BOOL isClicked = [ad isClicked]; BOOL isActionType = [ad isActionType]; if (isClicked && isActionType && !isParticipated) { // 참여 확인 중인 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else { if (totalReward > 0 && isParticipated) { // 참여 완료한 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else if (reward > 0) { // 리워드가 있는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else { // 리워드가 없는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } } } #pragma mark -- BABNativeAdViewDelegate - (void)BABNativeAdView:(BABNativeAdView *)adView didImpressAd:(BABAd *)ad { } - (void)BABNativeAdView:(BABNativeAdView *)adView didClickAd:(BABAd *)ad { [self updateCtaButtonWithAd:ad]; } - (void)BABNativeAdView:(BABNativeAdView *)adView willRequestRewardForAd:(BABAd *)ad { } - (void)BABNativeAdView:(BABNativeAdView *)adView didRewardForAd:(BABAd *)ad withResult:(BABRewardResult)result { [self updateCtaButtonWithAd:ad]; } - (void)BABNativeAdView:(BABNativeAdView *)adView didParticipateAd:(BABAd *)ad { [self updateCtaButtonWithAd:ad]; } @end
3.x (변경 후)
@import UIKit; @import BuzzAdBenefit; @interface CustomCtaView : UIView <BZVCtaViewProtocol> @end @implementation CustomCtaView ...생략... #pragma mark - BZVCtaViewProtocol - (void)renderRewardNotAvailableViewStateWithCtaText:(NSString *)ctaText { // 리워드가 없는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } - (void)renderRewardAvailableViewStateWithCtaText:(NSString *)ctaText reward:(NSInteger)reward { // 리워드가 있는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } - (void)renderParticipatingViewStateWithCtaText:(NSString *)ctaText { // 참여 확인 중인 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } - (void)renderParticipatedViewStateWithCtaText:(NSString *)ctaText { // 참여 완료한 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } @import UIKit; @import BuzzAdBenefit; @interface ViewController () @property (nonatomic, strong, readonly) BZVNativeAdView *nativeAdView; @property (nonatomic, strong, readonly) BZVMediaView *mediaView; @property (nonatomic, strong, readonly) UIImageView *iconImageView; @property (nonatomic, strong, readonly) UILabel *titleLabel; @property (nonatomic, strong, readonly) UILabel *descriptionLabel; @property (nonatomic, strong, readonly) CustomCtaView *ctaView; @end @implementation ViewController ...생략... - (void)renderAd:(BZVNativeAd *)ad { BZVNativeAdViewBinder *viewBinder = [BZVNativeAdViewBinder viewBinderWithBlock:^(BZVNativeAdViewBinderBuilder * _Nonnull builder) { builder.nativeAdView = self.nativeAdView; builder.mediaView = self.mediaView; builder.iconImageView = self.iconImageView; builder.titleLabel = self.titleLabel; builder.descriptionLabel = self.descriptionLabel; builder.ctaView = self.ctaView; }]; [viewBinder bindWithNativeAd:ad]; } @end
Swift
2.x (변경 전)
final class ViewController: UIViewController, BABNativeAdViewDelegate { let adView = BABNativeAdView(frame: .zero) let mediaView = BABMediaView(frame: .zero) let iconImageView = UIImageView(frame: .zero) let titleLabel = UILabel(frame: .zero) let descriptionLabel = UILabel(frame: .zero) let ctaView = CustomCtaView(frame: .zero) let rewardIcon = UIImageView(frame: .zero) let ctaLabel = UILabel(frame: .zero) ...생략... // Bind view with ad override func renderAd(_ ad: BABAd) { super.renderAd(ad) self.titleLabel.text = ad.creative.title self.descriptionLabel.text = ad.creative.body if let urlString = ad.creative.iconUrl { self.iconImageView.sd_setImage(with: URL(string: urlString)) } self.adView.ad = ad self.adView.mediaView = self.mediaView self.adView.clickableViews = [self.ctaButton, self.iconImageView] updateCtaButton(ad: ad) } func updateCtaButton(ad: BABAd) { let callToAction = ad.creative.callToAction ?? "디폴트 스트링" let reward = ad.getAvailableReward() let totalReward = ad.getTotalReward() let isParticipated = ad.isParticipated() let isClicked = ad.isClicked() let isActionType = ad.isActionType() if (isClicked && isActionType && !isParticipated) { // 참여 확인 중인 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else { if (totalReward > 0 && isParticipated) { // 참여 완료한 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else if (reward > 0) { // 리워드가 있는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } else { // 리워드가 없는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } } } // MARK: BABNativeAdViewDelegate func babNativeAdView(_ adView: BABNativeAdView, didImpress ad: BABAd) { } func babNativeAdView(_ adView: BABNativeAdView, didClick ad: BABAd) { updateCtaButton(ad: ad) } func babNativeAdView(_ adView: BABNativeAdView, willRequestRewardFor ad: BABAd) { } func babNativeAdView(_ adView: BABNativeAdView, didRewardFor ad: BABAd, with result: BABRewardResult) { updateCtaButton(ad: ad) } func babNativeAdView(_ adView: BABNativeAdView, didParticipateAd ad: BABAd) { updateCtaButton(ad: ad) } }
3.x (변경 후)
import UIKit import BuzzAdBenefit final class CustomCtaView: UIView, BZVCtaViewProtocol { ...생략... // MARK: BZVCtaViewProtocol func renderRewardNotAvailableViewState(withCtaText ctaText: String) { // 리워드가 없는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } func renderRewardAvailableViewState(withCtaText ctaText: String, reward: Int) { // 리워드가 있는 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } func renderParticipatingViewState(withCtaText ctaText: String) { // 참여 확인 중인 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } func renderParticipatedViewState(withCtaText ctaText: String) { // 참여 완료한 광고에 대한 CTA 뷰 레이아웃을 정의합니다. } } import UIKit import BuzzAdBenefit final class ViewController: UIViewController { let nativeAdView = BZVNativeAdView(frame: .zero) let mediaView = BZVMediaView(frame: .zero) let iconImageView = UIImageView(frame: .zero) let titleLabel = UILabel(frame: .zero) let descriptionLabel = UILabel(frame: .zero) let ctaView = CustomCtaView(frame: .zero) ...생략... override func renderAd(_ ad: BZVNativeAd) { let viewBinder = BZVNativeAdViewBinder { builder in builder.nativeAdView = self.nativeAdView builder.mediaView = self.mediaView builder.iconImageView = self.iconImageView builder.titleLabel = self.titleLabel builder.ctaView = self.ctaView } viewBinder.bind(with: ad) } }
한 번에 여러 개의 광고 로드하기
기존에 한 번에 여러 개의 광고를 로드하는 기능을 사용하는 경우에만 해당합니다.
BuzzAd iOS용 SDK 3.0에서는 여러 개의 광고를 로드할 때 BZVNativeAdsRequest
클래스를 사용하도록 변경했습니다. 한 번에 여러 개의 광고를 요청하려면 아래의 순서대로 기존 코드를 수정하세요.
BABAdLoader
클래스를 삭제하세요.빌더 블록을 이용해
BZVBuzzAdNative
를 생성하세요..BZVNativeAdsRequest
데이터 객체를 생성해[BZVBuzzAdNative loadAdsWithAdsRequest:]
를 호출하세요.
Objective-C
2.x (변경 전)
BABAdLoader *adLoader = [[BABAdLoader alloc] initWithUnitId:@"YOUR_NATIVE_AD_UNIT_ID"]; [adLoader loadAdsWithSize:NATIVE_ADS_COUNT onSuccess:^(NSArray<BABAd *> * _Nonnull ads) { // 광고 할당이 성공하면 호출됩니다. } onFailure:^(NSError * _Nullable error) { // 할당된 광고가 없으면 호출됩니다. NSLog(@"Failed to load native ads"); }];
3.x (변경 후)
BZVNativeAdsRequest *adsRequest = [BZVNativeAdsRequest requestWithBlock:^(BZVNativeAdsRequestBuilder * _Nonnull builder) { builder.adCount = @(NATIVE_ADS_COUNT); // 한 번에 로드할 광고 개수를 설정합니다. }]; BZVBuzzAdNative *buzzAdNative = [BZVBuzzAdNative nativeWithUnitId:@"YOUR_NATIVE_UNIT_ID"]; [buzzAdNative loadAdsWithAdsRequest:adsRequest onSuccess:^(NSArray<BZVNativeAd *> * _Nonnull nativeAds) { // 광고 할당이 성공하면 호출됩니다. } onFailure:^(BZVError * _Nonnull error) { // 할당된 광고가 없으면 호출됩니다. NSLog(@"Failed to load native ads"); }];
Swift
2.x (변경 전)
let adLoader = BABAdLoader(unitId: "YOUR_NATIVE_AD_UNIT_ID") adLoader.loadAds(withSize: NATIVE_ADS_COUNT, onSuccess: { ads in // 광고 할당이 성공하면 호출됩니다. }, onFailure: { error in // 할당된 광고가 없으면 호출됩니다. print("Failed to load native ads") })
3.x (변경 후)
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를 변경하기 위해 이벤트 리스너를 사용했다면, 더 이상 사용할 필요 없습니다.
BuzzAd iOS용 SDK 3.0부터는 CTA View상태를
bind
하는 방식으로 변경했기 때문에, CTA View 상태 변경 외에 각 이벤트 별 구현이 필요할 경우에만 아래 가이드를 적용하세요.
BuzzAd iOS용 SDK 3.0에서는 BABNativeAdViewDelegate
를 BZVNativeAdEventDelegate
로 변경하고 BABNativeAdView
가 아닌 BZVNativeAd
의 delegate으로 설정하도록 변경했습니다.
광고 이벤트 리스너를 등록하려면 아래의 순서대로 기존 코드를 수정하세요.
BABNativeAdView
에서 delegate를 설정하는 코드를 삭제하세요.BABNativeAdViewDelegate
를BZVNativeAdEventDelegate
로 변경하세요.renderAd
호출 시점에 ad 객체에BZVNativeAdEventDelegate
를 설정하세요.
Objective-C
2.x (변경 전)
@interface ViewController () <BABNativeAdViewDelegate> @end @implementation ViewController - (void)viewDidLoad { ...생략... _adView.deleagte = self; } #pragma mark - BABNativeAdViewDelegate - (void)BABNativeAdView:(BABNativeAdView *)adView didImpressAd:(BABAd *)ad { // Native 광고가 사용자에게 노출되었을 때 호출됩니다. } - (void)BABNativeAdView:(BABNativeAdView *)adView didClickAd:(BABAd *)ad { // 사용자가 Native 광고를 클릭했을 때 호출됩니다. } - (void)BABNativeAdView:(BABNativeAdView *)adView willRequestRewardForAd:(BABAd *)ad { // 리워드 적립 요청시에 호출됩니다. } - (void)BABNativeAdView:(BABNativeAdView *)adView didRewardForAd:(BABAd *)ad withResult:(BABRewardResult)result { // 리워드 적립의 결과를 수신했을 때 호출됩니다. } - (void)BABNativeAdView:(BABNativeAdView *)adView didParticipateAd:(BABAd *)ad { // 광고 참여가 완료되었을 때 호출됩니다. } @end
3.x (변경 후)
@interface ViewController () <BZVNativeAdEventDelegate> @end @implementation ViewController - (void)renderAd:(BZVNativeAd *)ad { ...생략... [viewBinder bindWithNativeAd:ad]; // Optional: Native 광고 이벤트 처리를 위한 delegate을 등록하고 각 이벤트에 따라 필요한 기능을 구현합니다. // 주의: 반드시 bindWithNativeAd 함수를 호출한 이후에 리스너 등록을 해야합니다. [ad addNativeAdEventDelegate:self]; } #pragma mark - BZVNativeAdEventDelegate - (void)didImpressAd:(BZVNativeAd *)nativeAd { // Native 광고가 유저에게 노출되었을 때 호출됩니다. } - (void)didClickAd:(BZVNativeAd *)nativeAd { // 사용자가 Native 광고를 클릭했을 때 호출됩니다. } - (void)didRequestRewardForAd:(BZVNativeAd *)nativeAd { // 리워드 적립 요청시에 호출됩니다. } - (void)didRewardForAd:(BZVNativeAd *)nativeAd withResult:(BZVRewardResult)result { // 리워드 적립의 결과를 수신했을 때 호출됩니다. } - (void)didParticipateAd:(BZVNativeAd *)nativeAd { // 광고 참여가 완료되었을 때 호출됩니다. } @end
Swift
2.x (변경 전)
final class ViewController: UIViewController, BABNativeAdViewDelegate { override func viewDidLoad { ...생략... adView.deleagte = self } func babNativeAdView(_ adView: BABNativeAdView, didImpress ad: BABAd) { // Native 광고가 사용자에게 노출되었을 때 호출됩니다. } func babNativeAdView(_ adView: BABNativeAdView, didClick ad: BABAd) { // 사용자가 Native 광고를 클릭했을 때 호출됩니다. } func babNativeAdView(_ adView: BABNativeAdView, willRequestRewardFor ad: BABAd) { // 리워드 적립 요청시에 호출됩니다. } func babNativeAdView(_ adView: BABNativeAdView, didRewardFor ad: BABAd, with result: BABRewardResult) { // 리워드 적립의 결과를 수신했을 때 호출됩니다. } func babNativeAdView(_ adView: BABNativeAdView, didParticipateAd ad: BABAd) { // 광고 참여가 완료되었을 때 호출됩니다. } }
3.x (변경 후)
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) { // 광고 참여가 완료되었을 때 호출됩니다. } }
비디오 광고 리스너 등록하기
기존에 비디오 광고 리스너를 등록한 경우에만 해당합니다.
BuzzAd iOS용 SDK 3.0에서는 BABNativeAdViewVideoDelegate
를 BZVNativeAdViewVideoDelegate
로 변경했습니다.
비디오 광고 리스너를 등록하려면 기존의 BABNativeAdViewVideoDelegate
을 BZVNativeAdViewVideoDelegate
으로 변경하세요.
Objective-C
2.x (변경 전)
@interface ViewController () <BABNativeAdViewVideoDelegate> @end
3.x (변경 후)
@interface ViewController () <BZVNativeAdViewVideoDelegate> @end
Swift
2.x (변경 전)
final class ViewController: UIViewController, BABNativeAdViewVideoDelegate { }
3.x (변경 후)
final class ViewController: UIViewController, BZVNativeAdViewVideoDelegate { }
API 변경 내역
2.x (변경 전) | 3.0 (변경 후) | 설명 |
---|---|---|
|
| 클래스의 이름을 변경했습니다. |
|
| 클래스의 이름을 변경했습니다. |
|
| 클래스의 이름을 변경했습니다. |
|
|
|
|
| 함수의 이름을 변경하고 |
N/A |
| 클래스를 추가했습니다. |
N/A |
| 클래스를 추가했습니다. |
|
| 클래스의 이름을 변경했습니다. |
|
| 클래스의 이름을 변경했습니다. |