class CustomCpsAdViewHolder: BABAdViewHolder {
private var adView = BABNativeAdView()
private var mediaView = BABMediaView()
private var titleLabel = UILabel()
...
required init?(coder: NSCoder) {
super.init(coder: coder)
setUpView()
}
override init(frame: CGRect) {
super.init(frame: frame)
setUpView()
}
func setUpView() {
addSubview(self.adView)
adView.addSubview(self.mediaView)
adView.addSubview(self.titleLabel)
...
}
// 2) Bind view with ad
override func renderAd(_ ad: BABAd) {
super.renderAd(ad)
self.titleLabel.text = ad.creative.title
// description 필드가 objc 객체에 기본으로 있어서 body로 컨버팅 하여 사용
self.descriptionLabel.text = ad.creative.body
if let urlString = ad.creative.iconUrl {
self.iconImageView.sd_setImage(with: URL(string: urlString))
}
// for CPS
let product = ad.product
if product.discountedPrice != 0 {
self.priceView.text = NSNumber(value: product.discountedPrice).formattedString()
self.originalPriceView.text = NSNumber(value: product.price).formattedString()
let discountRate = (1 - product.discountedPrice / product.price) * 100
self.discountRateView.text = String(format: "%d%%", Int(discountRate))
} else {
self.priceView.text = NSNumber(value: product.price).formattedString()
self.originalPriceView.text = NSNumber(value: product.price).formattedString()
self.discountRateView.text = "0%%"
}
if let category = product.category {
self.categoryView.text = category
} else {
self.categoryView.isHidden = true
}
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.reward
let totalReward = ad.getTotalReward()
let isParticipated = ad.isParticipated()
let isClicked = ad.isClicked()
let isActionType = ad.isActionType()
if (isClicked && isActionType && !isParticipated) {
rewardIcon.image = nil
ctaLabel.text = "참여 확인 중"
} else {
if (totalReward > 0 && isParticipated) {
rewardIcon.image = UIImage(named: "ic_check")
ctaLabel.text = "참여 완료"
} else if (reward > 0) {
rewardIcon.image = UIImage(named: "ic_coin")
ctaLabel.text = "\(Int(ad.reward))P \(ad.creative.callToAction ?? "디폴트 스트링")"
self.rewardIcon.image =
UIImage(named: "point_ico") } else {
self.ctaLabel.text
= ad.creative.callToAction self.rewardIcon.image = nil
} ctaLabel.text = //callToAction
for CPS let}
product = ad.product }
if}
product.discountedPrice != 0
{ // MARK: BABNativeAdViewDelegate
self.priceView.text = NSNumber(value: product.discountedPrice).formattedString()// Handle ad callbacks
func self.originalPriceView.text = NSNumber(value: product.price).formattedString()
let discountRate = (1 - product.discountedPrice / product.price) * 100
babNativeAdView(_ adView: BABNativeAdView, didImpress ad: BABAd) {
NSLog("Integration QA: feed ad impressed")
}
self.discountRateView.text = String(format: "%d%%", Int(discountRate))
func babNativeAdView(_ adView: BABNativeAdView, didClick ad: BABAd) {
} else {updateCtaButton(ad: ad)
NSLog("Integration self.priceView.text = NSNumber(value: product.price).formattedString()
QA: feed ad clicked")
}
self.originalPriceView.text =func NSNumberbabNativeAdView(value_ adView: product.price).formattedString()
BABNativeAdView, willRequestRewardFor ad: BABAd) {
self.discountRateView.text = NSLog("0%%"Integration QA: feed ad will }request reward")
}
iffunc let category = product.category {
self.categoryView.text = product.category
} else {
self.categoryView.isHidden = truebabNativeAdView(_ adView: BABNativeAdView, didRewardFor ad: BABAd, with result: BABRewardResult) {
updateCtaButton(ad: ad)
NSLog("Integration QA: feed ad rewarded \(result)")
}
} func babNativeAdView(_ adView: BABNativeAdView, didParticipateAd self.adView.ad: =BABAd) ad{
self.adView.mediaView = self.mediaViewupdateCtaButton(ad: ad)
self.adView.clickableViews = [self.ctaButton, self.iconImageView]NSLog("Integration QA: feed ad participated")
}
}
extension NSNumber {
func formattedString() -> String? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.string(from: self)
}
} |