Skip to content

fix: 홈 네이티브 광고가 배틀 섹션 위로 노출되던 문제 수정 - #42

Merged
rrheon merged 2 commits into
developfrom
fix/home-ad-order
Aug 14, 2026
Merged

fix: 홈 네이티브 광고가 배틀 섹션 위로 노출되던 문제 수정#42
rrheon merged 2 commits into
developfrom
fix/home-ad-order

Conversation

@rrheon

@rrheon rrheon commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

요약

홈 상단에 네이티브 광고가 "지금 뜨는 배틀" 위로 떠오르던 노출 순서 버그 수정.

🐛 버그 수정

네이티브 광고 노출 위치 오류 (광고가 배틀 섹션 위로 올라가는 현상)

원인: AdFitNativeAdView가 배틀 섹션 조건문 밖에 위치하여, 화면 렌더링 시 조건과 무관하게 노출되면서 최상단으로 올라감.

  • 재현 1: onAppear 진입 전 첫 프레임 (스켈레톤 조건이 isLoading만 확인해 광고 자리만 먼저 노출)

  • 재현 2: 홈 API 실패 또는 hotBattles 응답이 빈 배열일 때 (배틀 섹션은 접히고 광고만 남음)

해결:

  • 광고 뷰를 !hotBattles.isEmpty 분기 안쪽(지금 뜨는 배틀 바로 아래)으로 이동.

  • hotBattles 섹션이 비어있을 경우, 광고가 "Best 배틀" 아래로 노출되도록 처리.

  • 두 위치에 동시에 렌더링되지 않도록 AdFit의 '1화면 1광고 단위' 제약을 준수

테스트 플랜

  • 정상 응답 → 지금 뜨는 배틀 → 광고 → Best 배틀 순서
  • 진입 직후 첫 프레임에 광고가 먼저 노출되지 않음
  • hotBattles 가 비면 광고가 Best 배틀 아래로 이동
  • 홈 API 실패 후 탭 재진입 시 재요청 발생

네이티브 광고 뷰가 배틀 섹션 조건 밖에 무조건 그려지고 있었다.
그래서 ① onAppear 도착 전 첫 프레임(스켈레톤 조건이 isLoading 만 봐서
미발동)과 ② 홈 API 실패·hotBattles 빈 응답 때 섹션만 접히면서
광고가 화면 최상단으로 올라왔다.

- 광고를 "지금 뜨는 배틀" 아래로 넣고, 그 섹션이 비면 "Best 배틀"
  아래로 폴백한다. if/else 라 AdFit 의 "한 화면에 같은 단위 1개" 제약은
  그대로 지킨다.
- 스켈레톤 조건에 !hasLoadedHome 을 더해 첫 프레임을 덮는다.
- hasLoadedHome 을 성공했을 때만 세운다. 실패까지 완료로 굳히면
  재진입해도 영영 재요청하지 않아 빈 홈에 갇힌다.

Stage 빌드·시뮬로 히어로 → 지금뜨는배틀 → 광고 → Best배틀 순서 육안 확인.
@github-actions

Copy link
Copy Markdown
Contributor

제출된 PR의 변경 사항들은 설명된 버그를 효과적으로 수정하며, 프로젝트의 아키텍처, SwiftUI 컨벤션 및 코드 품질 가이드라인을 잘 준수합니다. 특히 hasLoadedHome 플래그의 조건부 설정과 스켈레톤 로직의 보강, 그리고 광고 섹션의 위치 조정은 의도한 대로 동작하며 예상치 못한 문제를 일으키지 않을 것으로 보입니다. 전반적으로 코드 품질이 높고 명확하여 추가적인 피드백은 없습니다.

@Roy-wonji Roy-wonji left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 확인 해주세요

state.hasLoadedHome = true
switch result {
case let .success(bundle):
// 실패까지 로드 완료로 굳히면 재진입해도 영영 재요청하지 않아

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 필요 없는 주석은 제거 해주세요!

)
}

// 광고는 반드시 배틀 섹션 아래에만 노출한다 — 섹션 밖에 홀로 두면

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 주석을 제거 해야 할거 같습니다

@github-actions

Copy link
Copy Markdown
Contributor

전반적으로 PR의 설명대로 광고 노출 순서 버그를 수정하고, 스켈레톤 로딩 로직을 개선한 좋은 변경입니다. TCA, SwiftUI, 모듈 아키텍처 및 Swift 코딩 컨벤션을 잘 준수하고 있습니다. 특히 adSection()@ViewBuilder private func로 분리하여 코드 재사용성을 높이고 가독성을 개선한 점이 좋습니다.

리뷰에서 필요 없다고 한 주석 두 곳을 지웠다.

- HomeView: 광고 배치 분기 위 블록 주석
- HomeFeature: hasLoadedHome 위 설명 주석

adSection 에는 코드만 봐서는 알 수 없는 "AdFit 은 한 화면에
같은 광고 단위 1개만 허용" 제약만 한 줄 남겼다.
@rrheon
rrheon force-pushed the fix/home-ad-order branch from 3ed5e04 to ec7b93b Compare August 13, 2026 04:52
@github-actions

Copy link
Copy Markdown
Contributor

제출하신 PR은 홈 화면의 네이티브 광고 노출 순서 버그를 성공적으로 수정합니다. hotBattles 데이터 유무에 따라 광고의 위치를 조정하고, 초기 로딩 또는 API 실패 시 광고가 먼저 노출되지 않도록 shouldShowSkeleton 로직을 개선했습니다. 프로젝트의 TCA, SwiftUI, 모듈 아키텍처 및 Swift 코드 품질 가이드라인을 모두 잘 준수하고 있습니다. 코드는 명확하며 버그 수정 의도를 정확히 반영하고 있습니다.

@rrheon
rrheon merged commit cbe4c8a into develop Aug 14, 2026
5 of 6 checks passed
@rrheon
rrheon deleted the fix/home-ad-order branch August 14, 2026 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants