아직 앱스토어에 공개하지 않은 iOS 앱을 테스트플라이트로 깔아 보상형 광고 버튼을 눌렀는데, 시험 광고는 잘 나오다가 실제 광고 단위로 바꾸자 광고가 아예 안 뜰 때 원인과 대처를 알아보는 글입니다.
개인 게임 앱을 안드로이드에 먼저 내고 iOS 판을 준비하면서, 아이폰 시험판에도 출시 때 쓸 실제 보상형 광고 단위를 넣어 봤습니다. 그런데 광고 버튼을 누르면 광고 대신 "광고를 끝까지 보면 받을 수 있어요" 안내만 떴고, 광고를 본 적도 없는데 끝까지 보라는 말이 나오니 무엇이 문제인지 헷갈렸습니다.
- 실제 광고 단위는 앱이 애드몹 검토(앱 준비 상태)를 통과하기 전까지 광고 게재가 제한된다
- 그래서 출시 전 빌드는 구글 시험 광고 단위를 쓰고, 출시 빌드만 실제 단위를 넣도록 나눴다
- 안내 문구도 못 불러온 경우와 끝까지 안 본 경우를 따로 보여 주게 고쳤다
1. 시험 광고는 나오는데 실제 광고만 안 나올 때
애드몹은 개발용으로 늘 광고가 채워지는 구글 시험 광고 단위를 제공하는데, iOS 보상형은 ca-app-pub-3940256099942544/1712485313 이고 안드로이드는 ca-app-pub-3940256099942544/5224354917 입니다. 이 단위로는 아이폰에서도 광고가 잘 나왔으니 SDK 설정이나 앱 추적 허락(ATT) 순서는 문제가 아니었습니다.
실제 단위로 바꾸면 광고 요청은 나가지만 onAdFailedToLoad 로 떨어집니다. 이때 안내 문구가 실패 원인을 가리지 않고 한 가지뿐이라, 화면만 보면 사용자가 광고를 중간에 닫은 것처럼 보였습니다.
2. 원인: 새 앱은 검토 전까지 광고 게재가 제한된다
애드몹 도움말의 앱 설정 안내를 보면, 새 앱은 광고를 온전히 게재하기 전에 앱 준비 상태 검토를 거쳐야 하고 승인될 때까지는 광고 게재가 제한된다고 되어 있습니다. 검토는 앱이 지원되는 스토어에 올라가 애드몹 앱과 연결돼 있어야 진행되니, 아직 앱스토어에 없는 iOS 앱은 실제 광고가 채워지지 않는 게 자연스럽습니다.
이번에는 실패 코드를 남겨 두지 않아서 이 제한 하나로 확정하지는 못했습니다. 다만 같은 빌드에서 시험 단위는 나오고 실제 단위만 안 나왔고, 애드몹의 iOS 앱은 아직 스토어와 연결 전이었으니 이 안내와 맞아떨어졌습니다.
3. 빌드 종류별로 광고 단위 나누기
출시 전 시험판에서 실제 단위를 계속 누르는 건 득이 없습니다. 광고는 어차피 잘 안 나오고, 개발 중에 실제 광고를 반복해서 보거나 누르면 무효 트래픽으로 잡혀 애드몹 계정이 제한될 위험도 있습니다.

그래서 광고 단위를 코드에 박지 않고 빌드할 때 --dart-define=AD_REWARD=... 로 넘기게 했습니다. 값이 없으면 구글 시험 단위로 떨어지니, 출시용 빌드에만 실제 단위를 넣고 시험 서버용 빌드와 개발 빌드는 그냥 두면 됩니다.
4. 못 불러온 것과 끝까지 안 본 것을 구분하기
보상형 광고가 보상 없이 끝나는 경우는 둘인데, 광고를 아예 못 불러온 경우와 사용자가 끝까지 보지 않고 닫은 경우입니다. 둘에게 같은 문구를 보여 주면 앞의 경우 사용자는 이유를 모른 채 같은 버튼만 계속 누르게 됩니다.

onAdFailedToLoad 와 onAdFailedToShowFullScreenContent 에서 따로 표시를 남기고, 보상을 못 받았을 때 그 표시에 따라 문구를 고르게 했습니다. 실패할 때 code 와 message 를 로그로 남겨 두면 다음에 같은 일이 생겼을 때 원인을 바로 가를 수 있습니다.
5. 정리
출시 전 iOS 앱에서 시험 광고는 나오는데 실제 보상형 광고만 안 나온다면, 코드보다 먼저 애드몹에서 그 앱이 스토어와 연결돼 검토를 통과했는지 확인해 볼 만합니다. 승인 전에는 광고 게재가 제한되니, 출시 전 빌드는 시험 단위로 두고 출시 빌드에만 실제 단위를 넣는 편이 안전합니다.
안드로이드에 먼저 내고 iOS 를 뒤따라 내는 경우라면, 애드몹의 iOS 앱 연결과 검토는 앱스토어 공개 뒤에야 시작된다는 점을 일정에 넣어 두면 좋습니다.
여기까지 출시 전 iOS 앱의 애드몹 보상형 광고 no fill에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!