광고 하나 넣었을 뿐인데
cellForRowAt이 230줄이 됐다. 이 글은 광고 삽입 요구사항 → 1차 구현(괴물 탄생) → 리팩토링(수습) → 그 과정에서 잡은 버그 3건의 기록이다.
기획 요구는 단순했다. "무조건 3번째 셀 자리에 광고가 들어가도록 해달라."
단순해 보이지만 리스트 데이터 개수에 따라 규칙이 갈라진다.
Style3)이 무조건 먼저, 수락 완료 셀(Style4)이 그 다음Style5)이 먼저, "내역 없음" 셀(Style2)이 다음| 셀 | 용도 |
|---|---|
| GiftBoxListCustomCellStyle2 | "데이터 없음" 안내 |
| GiftBoxListCustomCellStyle3 | 수락 대기 선물 |
| GiftBoxListCustomCellStyle4 | 일반 선물 (받은/보낸 공용) |
| GiftBoxListCustomCellStyle5 | 광고 배너 |
class GiftBoxListCustomCellStyle5: UITableViewCell {
@IBOutlet weak var bannerView: BannerAdView!
private var isBannerLoaded = false
override func awakeFromNib() {
super.awakeFromNib()
}
func setupBannerAd(rootVC: UIViewController) {
if !isBannerLoaded {
bannerView.setBannerAd(rootVC: rootVC, placementId: "테스트코드 입력", size: .DYNAMIC) // 테스트 코드
bannerView.delegate = self
bannerView.requestAd()
isBannerLoaded = true
}
}
}
extension GiftBoxListCustomCellStyle5: BannerAdWidgetDelegate {
func onBannerLoaded(_ apid: String) {
print("GiftBoxListCustomCell5 테스트 배너 로드 성공")
}
func onBannerFailed(_ apid: String, error: AvatyeAdCash.AdCashErrorModel) {
print("GiftBoxListCustomCell5 테스트 배너 로드 실패", error)
}
func onBannerClicked(_ apid: String) {
print("GiftBoxListCustomCell5 테스트 배너 클릭")
}
}
isBannerLoaded 플래그는 셀 재사용 시 광고가 중복 요청되는 걸 막는다.
먼저 numberOfRowsInSection. 광고 셀이 끼어드니 행 개수부터 조건 분기가 생긴다.