적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[iOS] 롤링 배너 노출 트래킹

hongssup_ 2025. 6. 20. 18:35
반응형

광고 배너가 도입되면서 배너 노출 및 클릭 트래킹 기능을 구현하게 되었다. 

문제는 화면마다 UI 구현 및 작동 방식이 다 다르다는 것.. 😱

 

[홈 / 커뮤니티 / 전문가 찾기] 이렇게 세가지 탭에 배너가 적용이 되어 있는데, 클릭 수는 명시적이지만 노출 수 감지하는 게 문제였다. 

 

네이버 카카오 등등 보통 광고 배너는 롤링 방식이 아니라 하나만 노출하고 새로고침될 때 다른 배너로 바뀌는 형태가 많던데

우리는 롤링을 유지하면서 화면에 배너가 보였을 때 정확한 노출 수 집계를 해야하는 것... 

 

화면마다 배너가 적용된 방식을 먼저 살펴보자면,

 

1. 홈 배너

- SwiftUI의 ScrollView 내에 위치

ScrollView {
    VStack {
        ...
        bannerView
        ...
    }
}

- SwiftUI의 ScrollView는 뷰 재사용이나 셀 해제를 하지 않아서, 내부 뷰들은 항상 메모리에 존재

- 따라서 HomeView가 화면에 처음 보여질 때 bannerView의 onAppear가 트리거되고, 이후 스크롤로 인해 화면에서 보이지 않아도 onDisappear가 호출되지 않는다

- onAppear 시점 : 뷰가 처음 로드될 때

- GeometryReader를 사용해 실제로 화면에 보이는지를 직접 추적할 수 있음

 

2. 커뮤니티 배너

- SwiftUI의 List 안에 위치

ScrollView {
    List {
        ...
        bannerView 
        ...
    }
}

- List는 내부적으로 UITableView 기반으로 동작, 셀 기반의 뷰 재사용과 뷰 해제

- 배너 view가 화면에 보이거나 사라질 때 실제로 onAppear, onDisappear가 트리거됨

- 즉, 스크롤로 화면에 보이는 시점 기준으로 정확히 감지됨

- onAppear 시점 : 실제로 화면에서 보일 때

 

3. 전문가 찾기 배너

- UITableView 의 dequeueReusableCell 로 구현이 되어있고, 롤링은 FSPagerView 라이브러리를 사용 중..

- 전문가 찾기 ViewController 안에, CollectionViewCell로 이루어진 상품별 탭 안에, UITableViewCell로 구현이 되어 있음

- 심지어는 전문가 찾기 탭 내의 상품 탭마다 타이머가 각각 따로 계속 돌아가고, 화면에 보이지 않아도 배너 롤링이 계속 되고 있는 것이었다 

 

 

 

 

광고주 요청으로 빠르게 작업을 해야하기 때문에 우선은 이렇게 적용했는데 (그대로 두고 로그만 보내지 않도록 했는데)

타이머를 하나로 두고 현재 화면에 보이지 않을 경우 배너 롤링을 하지 않는 방향으로 수정을 해야겠다..

728x90
반응형