Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleObjective-C
Code Block
languageobjective-c
@interface CustomCpsAdViewHolder: BABAdViewHolder {
  BABNativeAdView *_adView;
  BABMediaView *_mediaView;
  UILabel *_titleLabel;
  ...
}
@end

@implementation CustomCpsAdViewHolder

- (instancetype)initWithCoder:(NSCoder *)coder {
  if (self = [super initWithCoder:coder]) {
    [self setUpView];
  }
  return self;
}

- (instancetype)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
    [self setUpView];
  }
  return self;
}

- (void)setUpView {
  _adView = [[BABNativeAdView alloc] initWithFrame:CGRectZero];
  _mediaView = [[BABMediaView alloc] initWithFrame:CGRectZero];
  _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  ...
  
  [self addSubview:_adView];
  [_adView addSubview:_mediaView];
  [_adView addSubview:_titleLabel];
  ...
}

// 1) Populate your view (example using xib file)
- (void)loadFromNib {
  self.adView = [[NSBundle bundleForClass:[CustomCpsAdViewHolder class]] loadNibNamed:@"CustomAdViewHolder" owner:self options:nil][0];
  [self addSubview:self.adView];
}

// 2) Bind view with ad
- (void)renderAd:(BABAd *)ad {
  [super renderAd:ad];
  
self.  _titleLabel.text = ad.creative.title;
  
  // description 필드가 objc 객체에 기본으로 있어서 body로 컨버팅 하여 사용
  self._descriptionLabel.text = ad.creative.body;
  
  [self._iconImageView sd_setImageWithURL:[NSURL URLWithString:ad.creative.iconUrl]];
  
  // for CPS
  BABProduct *product = ad.product;
  if (adproduct.rewarddiscountedPrice >!= 0) {
    self.ctaLabel_priceView.text = [NSStringself stringWithFormatformattedStringForNumber:@"+%d %@", (int)ad.reward, ad.creative.callToAction(product.discountedPrice)];
    [self.rewardIcon setImage:[UIImage imageNamed:@"point_icon"]_originalPriceView.text = [self formattedStringForNumber:@(product.price)];
  } else {CGFloat discountRate = (1 - self.ctaLabel.text = ad.creative.callToActionproduct.discountedPrice / product.price) * 100;
    [self.rewardIcon setImage:nil_discountRateView.text = [NSString stringWithFormat:@"%.f%%", discountRate];
  } else {
   // for CPS
  BABProduct *product = ad.product _priceView.text = [self formattedStringForNumber:@(product.price)];
  if (product.discountedPrice != 0) {
    self.priceView  _originalPriceView.text = [self formattedStringForNumber:@(product.discountedPriceprice)];
    self.originalPriceView_discountRateView.text = [self formattedStringForNumber:@(product.price)]@"0%";
  }
 CGFloat discountRate
= (1 -if (product.discountedPricecategory / product.price!= nil) *{
100;     self.discountRateView_categoryView.text = [NSString stringWithFormat:@"%.f%%", discountRate]ad.product.category;
  } else {
    self.priceView.text_categoryView.hidden = [self formattedStringForNumber:@(product.price)];YES;
  }
  self.originalPriceView.text
= [self formattedStringForNumber:@(product.price)];
  _adView.ad = ad;
  self.discountRateView.text_adView.mediaView = @"0%"_mediaView;
  }_adView.clickableViews = @[_ctaButton, _iconImageView];
  if (product.category
!= nil) {
 [self updateCtaButtonWithAd:ad];
}

 _category.text- (void)updateCtaButtonWithAd:(BABAd *)ad {
  NSString *callToAction = ad.productcreative.categorycallToAction;
  }double elsereward {= ad.reward;
  double _category.hiddentotalReward = YES[ad getTotalReward];
  }BOOL isParticipated = [ad isParticipated];
  BOOL self.adView.adisClicked = [ad isClicked];
  BOOL self.adView.mediaViewisActionType = self.mediaView [ad isActionType];
  if (isClicked &&  self.adView.clickableViews = @[self.ctaButton, self.iconImageView];
}

- (NSString *)formattedStringForNumber:(NSNumber *)number {
  NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
  formatter.numberStyle = NSNumberFormatterDecimalStyle;
  return [formatter stringFromNumber:number];
}
@end
Code Block
languageobjective-c
BABFeedConfig *config = [[BABFeedConfig alloc] initWithUnitId:@"YOUR_FEED_UNIT_ID"];
config.cpsAdViewHolderClass = [CustomCpsAdViewHolder class];
Expand
titleSwift
Code Block
languageswift
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

    self.iconImageView.sd_setImage(with: URL(string: ad.creative.iconUrl))

    if (ad.reward > 0) {
      self.isActionType && !isParticipated) {
    _rewardIcon.image = nil;
    _ctaLabel.text = @"참여 확인 중";
  } else {
    if (totalReward > 0 && isParticipated) {
      _rewardIcon.image = [UIImage imageNamed:@"ic_check"];
      _ctaLabel.text = @"참여 완료";
    } else if (reward > 0) {
      _rewardIcon.image = [UIImage imageNamed:@"ic_coin"];
      _ctaLabel.text = [NSString stringWithFormat:@"+%d %@", (int)reward, callToAction];
    } else {
      _rewardIcon.image = nil;
      _ctaLabel.text = callToAction;
    }
  }
}

- (NSString *)formattedStringForNumber:(NSNumber *)number {
  NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
  formatter.numberStyle = NSNumberFormatterDecimalStyle;
  return [formatter stringFromNumber:number];
}

#pragma mark -- BABNativeAdViewDelegate
// Handle ad callbacks
- (void)BABNativeAdView:(BABNativeAdView *)adView didImpressAd:(BABAd *)ad {
  NSLog(@"Integration QA: feed ad impressed");
}

- (void)BABNativeAdView:(BABNativeAdView *)adView didClickAd:(BABAd *)ad {
  [self updateCtaButtonWithAd:ad];
  NSLog(@"Integration QA: feed ad clicked");
}

- (void)BABNativeAdView:(BABNativeAdView *)adView willRequestRewardForAd:(BABAd *)ad {
  NSLog(@"Integration QA: feed ad will request reward");
}

- (void)BABNativeAdView:(BABNativeAdView *)adView didRewardForAd:(BABAd *)ad withResult:(BABRewardResult)result {
  [self updateCtaButtonWithAd:ad];
  NSLog(@"Integration QA: feed ad rewarded %d", result);
}

- (void)BABNativeAdView:(BABNativeAdView *)adView didParticipateAd:(BABAd *)ad {
  [self updateCtaButtonWithAd:ad];
  NSLog(@"Integration QA: feed ad participated");
}

@end
Code Block
languageobjective-c
BABFeedConfig *config = [[BABFeedConfig alloc] initWithUnitId:@"YOUR_FEED_UNIT_ID"];
config.cpsAdViewHolderClass = [CustomCpsAdViewHolder class];
Expand
titleSwift
Code Block
languageswift
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)
  }
}
Code Block
languageswift
let config = BABFeedConfig(unitId: "YOUR_FEED_UNIT_ID")
config.cpsAdViewHolderClass = CustomCpsAdViewHolder.self

...