포스트

토스 '광고 예고' 반려 — 토스트도 안내문도 떨어지고, 통과한 모양은 하나였다

앱인토스 검수에서 "유저가 예상하기 어려운 시점에 광고가 노출돼요"로 세 앱이 동시에 반려됐습니다. 토스트와 상시 안내문은 두 번 다 실패했고, 승인된 앱과 반려된 앱의 차이는 안내문 위치 하나였습니다. 그 모양을 광고 앱 33개에 적용해 한 번에 검수받은 결과, 같은 코드가 승인과 반려를 오간 타로, 그리고 안내문 한 줄이 만든 화면 한 장짜리 빈칸까지 정리했습니다

토스 '광고 예고' 반려 — 토스트도 안내문도 떨어지고, 통과한 모양은 하나였다

9월 21~22일, 앱인토스 검수에서 세 앱이 같은 사유로 반려됐습니다. 내 이름 로또, 병 돌리기, 타로 운세입니다. 반려 항목은 하나뿐이었습니다.

유저가 예상하기 어려운 시점에 광고가 노출돼요. 광고 노출 전에 유저가 인지할 수 있도록 CTA 문구나 UI를 추가해 주세요.

말은 단순한데, 무엇을 하면 통과하는지는 적혀 있지 않습니다. 몇 번 떨어지고 나서야 감을 잡았습니다. 토스에 광고를 붙이는 분께 도움이 되도록 순서대로 적어 둡니다.

실패 1 — 토스트로 알리기

타로 운세는 이보다 먼저, 9월 18일에 같은 사유로 한 번 반려됐습니다. 그래서 광고 직전에 “곧 광고가 나와요” 토스트를 띄우고, 화면에 “결과를 본 뒤 광고가 나와요” 안내문도 늘 붙여 두었습니다.

9월 21일, 같은 사유로 또 반려됐습니다. 예고 자체는 정확했는데도 그랬습니다. 지나가는 토스트나 늘 떠 있는 문장은 사용자가 무언가를 누르는 행동과 이어지지 않아서 예고로 쳐 주지 않는 것으로 보입니다.

실패 2 — 확인 시트로 묻기

다음에는 광고 직전에 시트를 띄웠습니다. “광고 후 시작돼요” 아래에 [광고 보고 시작하기] [다음에 할게요] 두 버튼을 두었습니다. 브라우저에서는 멀쩡했습니다.

그런데 실제 폰에서 써 보니 “다음에 할게요”를 눌러도 병이 돌고 결과가 나왔습니다. 광고를 안 봤다고 게임을 막을 수는 없습니다. 그것도 반려 사유가 되니까요. 결국 취소 버튼은 아무 의미가 없는 버튼이었습니다. 거부할 수 없는 선택지를 시트로 묻지 말 것. 이 설계는 검수에 내기 전에 되돌렸습니다.

통과한 모양 — 사주로또

답은 이미 우리 앱 안에 있었습니다. 같은 반려를 겪은 사주로또가 9월 20일에 승인됐습니다. 그리고 로또 앱 4개는 코드가 거의 같았는데, 승인과 반려를 가른 차이는 안내문 위치 하나였습니다.

앱안내문 위치결과
사주로또버튼 아래승인
내 이름·차번호·별자리 로또버튼 위반려

그래서 지킬 모양을 세 가지로 정했습니다.

  1. 순서: 버튼 → 광고 → 결과. 결과를 먼저 보여 주고 광고를 띄우지 않습니다.
  2. 위치: 안내문은 버튼 바로 아래. 같은 문장이라도 버튼 위에 두면 반려됐습니다.
  3. 문구: 방향을 가리키지 않기. “아래 버튼을 누르면…”이 아니라 “번호를 뽑기 전에 광고가 한 번 재생돼요.”처럼 씁니다. 버튼에는 📺 표시를 붙입니다.

로또 3종을 이 모양으로 고치자 모두 승인됐습니다.

숨어 있던 무경고 광고 18개

원인을 찾다가 더 큰 문제를 발견했습니다. 게임 대부분은 “하트(입장권)” 구조였는데, 하트 기능을 공용 코드의 스위치 하나로 꺼 둔 상태였습니다. 하트가 꺼지면 그 자리를 3판마다 전면 광고를 예고 없이 자동으로 띄우는 코드가 대신하고 있었습니다.

하트가 들어갔다고 알고 있던 앱 18개가 실제로는 무경고 전면 광고 앱이었던 것입니다. 병 돌리기가 바로 그래서 반려됐습니다. 이미 라이브인 앱은 예전 기준으로 통과한 것이라, 다음 번들을 올리는 순간 모두 같은 사유에 걸릴 상황이었습니다.

하트로 되돌리자는 생각도 했지만, 토스가 요구한 건 광고 방식이 아니라 예고였습니다. 실제로 내 이름 로또는 보상형 광고였는데도 예고가 없어서 똑같이 반려됐습니다.

33개를 한 번에

9월 29일, 광고가 붙은 앱 33개 전부에 같은 모양을 넣었습니다. 앱마다 광고 구조가 달라서 넷으로 나눴습니다.

  • 하트 구조 게임 16개: 광고가 붙는 차례에만 시작 버튼 바로 아래에 “📺 다음 판은 광고가 먼저 재생돼요” 한 줄을 띄웁니다. 누르면 광고 → 판 시작. 판 도중에 쓰는 무르기·미리보기는 광고 없이 통과시켰습니다. 판 중간에 광고가 끼어드는 것도 ‘예상하기 어려운 시점’이니까요.
  • 자체 전면 광고 앱 7개: 결과 직후에 띄우던 전면을 없애고, 다음 판 버튼을 누르면 광고 → 시작으로 바꿨습니다.
  • 타로 2개: 광고 차례인 장이면 카드 뒷면마다 📺 표시를 붙이고 카드 아래에 안내문을 둡니다. 카드를 고르면 광고 → 뒤집기.
  • 간호조무사 모의고사: 제출 버튼 아래 예고, 제출 → 광고 → 채점. 시간이 끝나 자동 제출될 때는 광고 없이 바로 결과를 보여 줍니다.

광고가 없는 웹 미리보기에서는 예고도 숨깁니다. 광고가 안 나오는 곳에서 “광고가 나와요”라고 쓰면 그게 거짓말이 되기 때문입니다.

결과는 이랬습니다. 게임 21개는 1분 안에 자동 승인됐고, 사람이 보는 비게임 12개 중 대부분이 승인됐습니다. 광고 예고로 다시 반려된 건 타로 운세 하나였습니다.

같은 코드가 승인과 반려를 오갔다

타로 운세와 운세 타로핑은 같은 소스로 빌드합니다. 모양만 귀엽게 바꾼 것이 타로핑입니다. 그런데 9월 29일 제출에서 타로핑은 승인되고 타로 운세는 반려됐습니다.

코드 문제가 아니라고 보고, 같은 빌드를 다시 묶어 내면서 이번에는 검수자가 확인할 순서를 출시 노트와 메모에 적었습니다.

  1. 첫 장은 광고가 없습니다.
  2. ‘한 장 더 뽑기’를 누르면 카드 뒷면에 📺 표시, 카드 아래에 안내문이 나옵니다.
  3. 카드를 고르면 광고가 나온 뒤 카드가 뒤집힙니다.

9월 30일, 이 버전이 승인됐습니다.

10월 3일에는 두 앱 모두 다시 반려됐습니다. 광고 모양은 승인받은 그대로였습니다. 타로핑은 같은 버전을 그대로 다시 냈고 10월 5일에 승인됐습니다. 타로 운세는 이번에도 출시 노트 앞부분을 확인 순서로 바꿔 다시 냈고, 8일을 기다린 끝에 10월 11일 승인됐습니다.

여기서 배운 것은 이렇습니다.

  • 카드를 누르면 광고가 나오는 모양은 검수자에 따라 판단이 갈립니다. “버튼 → 광고 → 결과”보다 덜 명확하기 때문일 겁니다.
  • 그런 모양을 낼 때는 출시 노트에 확인 순서를 적는 것이 실제로 도움이 됐습니다. 통과한 버전은 모두 노트에 순서가 있었습니다.
  • 그래도 계속 걸리면 다음 수는 정해 두었습니다. 카드를 고른 뒤 “📺 광고 보고 결과 보기” 버튼을 두는 것, 즉 사주로또와 같은 모양입니다.

덤 — 안내문 한 줄이 만든 화면 한 장짜리 빈칸

10월 4일, 별자리 로또와 내 이름 로또에서 “번호를 뽑기 전에…” 안내문 밑에 화면 한 장만큼 빈칸이 생겼다는 제보가 왔습니다. 아래 문구를 보려면 한 페이지를 스크롤해야 했습니다.

원인은 공용 스타일 한 줄이었습니다. 안내문이 버튼 줄 안에서 한 줄을 통째로 차지하도록 flex-basis: 100%를 줬는데, 세로로 쌓이는 화면 바로 아래에 놓이면 이 값이 너비가 아니라 높이 100%가 됩니다. 화면 바로 아래에 놓인 안내문에만 flex-basis: auto를 주는 한 줄로 고쳤습니다.

이 결함은 웹 미리보기에서는 보이지 않았습니다. 앞에서 적은 대로 웹에서는 예고를 숨기기 때문입니다. 예고 주변 레이아웃은 예고를 억지로 띄워 놓고 봐야 합니다.

정리

  • 토스의 광고 예고는 누르는 행동과 이어져야 합니다. 토스트·상시 안내문은 통하지 않았습니다.
  • 통과한 모양은 버튼 → 광고 → 결과, 안내문은 버튼 바로 아래, 방향을 가리키지 않는 문구입니다.
  • 거부할 수 없는 선택지를 묻지 않습니다.
  • 공용 코드의 스위치 하나가 앱 수십 개의 광고 방식을 바꿀 수 있습니다. 반려가 오면 어느 구조의 앱인지부터 보고, 같은 구조를 한 번에 고칩니다.
  • 판단이 갈리는 모양은 출시 노트에 확인 순서를 적어 냅니다.

토스가 10월 22일 노출 정책 변경과 함께 안내한 UX 원칙에도 “광고 노출 시점을 미리 알린다”, “광고를 봤다면 결과를 바로 보여 준다”가 들어 있습니다. 반려를 피하려고 고친 것이 앞으로의 노출 기준과도 같은 방향이라, 미루지 않고 지금 고쳐 두는 편이 낫습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.