플랜메이트 안드로이드 앱이 구글 플레이 비공개 테스트에 들어갔습니다. 테스터로 등록된 계정이면 스토어에서 받을 수 있고, 웹판은 예전처럼 /plan/ 에서 설치 없이 그대로 쓸 수 있습니다.
올리기 전에 붙인 것이 광고입니다. 그런데 광고는 "넣는다/안 넣는다"의 문제가 아니라 어디에 두느냐의 문제였습니다. 자리를 잘못 잡으면 앱을 지우게 만듭니다.
안 띄울 자리를 먼저 정했습니다
넣을 자리를 고르기 전에 넣지 않을 자리를 정했습니다.
- 앱을 켜자마자 전면광고를 띄우지 않는다. 애드몹 정책 위반이기도 하지만, 그보다 "약속 하나 확인하려고 열었는데 광고부터"가 앱을 지우는 가장 빠른 길입니다.
- 일정을 저장할 때 띄우지 않는다. 그건 이 앱의 핵심 동작입니다. 핵심 동작에 광고를 걸면 사람은 핵심 동작을 덜 하게 됩니다. 그러면 앱을 쓸 이유가 없어집니다.
남은 자리가 통계 화면이었습니다. 매일 들어가는 곳이 아니고, "결과를 본다"는 맥락이라 잠깐 기다리는 것이 덜 거슬립니다. 그마저도 하루 두 번, 최소 네 시간 간격으로 막았습니다.
규칙을 문서가 아니라 코드에 뒀습니다
이런 규칙은 적어 두면 잊힙니다. 그래서 ads.ts 안에 상수로 박았습니다.
const CAP_PER_DAY = 2; # 하루에 띄울 수 있는 최대 횟수
const CAP_GAP_MIN = 240; # 전면광고 사이 최소 간격(분)
띄워도 되는지 판정하는 부분은 순수 함수로 갈라 뒀습니다. 지금 시각과 마지막으로 띄운 시각, 오늘 띄운 횟수를 넣으면 참/거짓이 나옵니다. 그래야 테스트가 그대로 돌려 볼 수 있습니다 — 광고를 실제로 띄워 보면서 "네 시간 뒤에 다시 뜨나"를 확인할 수는 없으니까요.
그리고 하나 더. 광고를 못 받아도 화면은 그대로 넘어갑니다. 광고 로딩이 실패하거나 느리다고 사용자가 통계 화면에 못 들어가면, 그건 광고가 앱을 인질로 잡은 것입니다.
배너 높이를 추측하지 않았습니다
배너를 붙이면 화면 아래가 그만큼 가려집니다. 여기서 흔한 실수가 "배너는 대략 50dp니까 그만큼 여백을 두자"입니다. 적응형 배너는 기기마다 높이가 다릅니다.
그래서 SDK 가 알려 주는 실제 높이를 받아 CSS 변수로 넘기고, 화면이 그 값만큼 비켜서게 했습니다. 실측으로 아래 여백이 96 → 158px, 떠 있는 버튼이 20 → 82px 로 움직였습니다.
값을 못 받으면 0 입니다. 그러면 광고가 없던 때와 똑같이 그려집니다. 웹판이 딱 그 상태입니다 — 애드몹 SDK 자체가 없어서 광고 관련 함수가 전부 조용히 아무것도 하지 않습니다.
내 기기를 테스트 기기로 등록했습니다
개발하면서 내가 내 실광고를 보고 누르면 애드몹이 무효 트래픽으로 판단합니다. 수익이 깎이는 정도가 아니라 계정이 정지됩니다. 스토어에 이미 올린 다른 앱까지 걸립니다.
실기기에서 처음 돌리면 logcat 에 기기 해시가 찍힙니다. 그 값을 코드의 테스트 기기 목록에 넣으면 그 기기는 늘 테스트 광고만 받습니다. 이 해시는 비밀이 아니라 저장소에 그대로 커밋해도 됩니다.
주의할 것이 하나 있습니다. 이건 "전체를 테스트 모드로" 켜는 스위치가 아니라 "이 목록에 있는 기기만" 테스트 기기로 등록하는 것입니다. 전체 테스트 모드로 켜면 모든 사용자가 테스트 광고를 보게 되고 수익은 0 이 됩니다.
"광고 없음"이라 적어 둔 곳을 전부 고쳤습니다
이게 실은 제일 손이 많이 간 부분입니다. 광고가 없던 시절에 "이 앱은 광고를 넣지 않습니다"를 네 군데에 적어 뒀습니다.
- 앱 안 개인정보처리방침
- 공개된 방침 페이지
- 스토어 등록 설명
- 앱 안 사용설명서
하나라도 안 고치면 앱이 하는 일과 앱이 하는 말이 어긋납니다. 스토어 심사에서 걸리는 문제이기도 하지만, 그 전에 사용자에게 거짓말이 됩니다. 기능을 바꾸면 그 기능을 설명하는 문장을 같이 고치는 것이 이 프로젝트의 규칙이고, 이번이 그 규칙이 가장 크게 걸린 경우였습니다.
지금 상태
이 글은 비공개 테스트에 들어가던 때를 적은 것입니다. 그 뒤로 테스트를 마치고 2026년 10월 3일 구글 플레이에 정식 출시했습니다. 아래는 지금 기준으로 고쳐 둡니다. 윗부분의 광고 이야기는 그때 정한 규칙 그대로이고, 지금도 같습니다.
- 안드로이드 앱은 정식 출시됐습니다. 테스터 등록 없이 구글 플레이에서 바로 받을 수 있습니다. 쓰시다 이상한 점이 있으면 문의로 알려 주세요 — 고치고 고친 날짜를 글에 남깁니다.
- 웹판에는 광고가 없습니다. 애드몹은 앱 전용이고, 웹에 광고를 넣으려면 애드센스가 따로 필요합니다.
- 일정은 여전히 기기 안에만 저장됩니다. 광고가 붙었다고 데이터가 어디로 나가지 않습니다.
- 이동 시간·비용은 여전히 추정치입니다. 실제 지도앱과 대조한 검증은 아직입니다.
이 앱을 왜 이렇게 만들었는지는 먼저 쓴 글에 적어 뒀습니다. 근거를 못 대는 숫자를 화면에 두지 않기로 하고 세 가지를 지운 이야기입니다.