TV 페어링 코드 창에서 사용자가 떠난 이유: 6자리 코드와 한글 자판
TV 리모컨 앱의 페어링 오류를 고친 뒤 오히려 「코드 입력 창에서 취소」가 9% 에서 19% 로 늘었습니다. GA4 실패 사유를 열어 보고, 코드 입력칸 하나가 한글 자판으로 열리던 것을 찾은 과정과 고친 방법을 정리합니다.
고쳤더니 다른 숫자가 올랐다
안드로이드 TV·셋톱박스를 Wi-Fi 로 조작하는 리모컨 앱을 운영하고 있습니다. 처음 붙을 때 TV 화면에 6자리 코드가 뜨고, 휴대폰에 그 코드를 넣어야 짝이 맺어집니다.
10월 2일 1.2.17 에서 「페어링이 필요한 TV 를 연결 실패로 판정하던」 버그를 고쳤습니다. 효과는 바로 보였습니다. GA4 에서 연결을 시도한 사용자 가운데 connect_error 로 끝난 비율이 U+TV 앱 기준 38% 에서 7% 로 내려갔습니다(게시 전 7일 vs 게시 후 3일, 아직 업데이트 안 한 사용자 섞임).
그런데 같은 표에서 code_cancel, 즉 코드 입력 창에서 취소하고 나간 비율이 9% 에서 19% 로 올라 있었습니다.
숫자부터 해석
두 숫자는 연결돼 있습니다. 예전엔 코드 창까지 가지도 못하고 연결 실패로 끝나던 사람들이, 버그가 고쳐지자 이제 코드 창까지 옵니다. connect_error 가 31%p 줄고 code_cancel 이 10%p 늘었으니, 새로 코드 창에 온 사람 셋 중 하나쯤이 거기서 그만둔 셈입니다.
그러니 질문은 「코드 창에서 왜 막히나」 였습니다.
코드는 6자리 16진수
이 앱은 페어링 때 코드 길이를 6으로 요청합니다. 우리가 확인한 기기(크롬캐스트)에서 코드는 4A2F1C 같은 16진수였습니다. 한 자리가 숫자일 확률은 10/16 이라서, 여섯 자리가 전부 숫자일 확률은 (10/16)^6 ≈ 6% 입니다. 코드의 약 94% 에 A~F 영문자가 하나 이상 섞여 있습니다.
코드 입력칸은 이렇게 돼 있었습니다.
<EditText
android:inputType="textCapCharacters|textNoSuggestions" />
일반 글자 입력칸입니다. 이 경우 키보드는 사용자가 마지막에 쓰던 언어로 열립니다. 같은 문제를 10월 2일 다른 앱(새로 만든 TV 리모컨 앱)에서 먼저 지적받았습니다. 「6자리 입력 화면에 키보드가 한글로 뜬다」 는 것이었습니다. 한국 사용자는 대부분 마지막 언어가 한글이라, TV 에 뜬 A 를 누르면 칸에는 ㅁ 이 들어갑니다. 언어 전환 키를 찾지 못하면 코드를 끝까지 넣을 방법이 없습니다.
새 앱은 그날 고쳤는데, 같은 화면을 가진 기존 리모컨 앱 4개에는 옮기지 않은 상태였습니다.
고친 것 세 가지
1. 영문 자판으로 열기
<EditText
android:inputType="textVisiblePassword|textCapCharacters|textNoSuggestions" />
비밀번호 계열 입력칸은 키보드가 영문 자판으로 여는 경우가 많습니다. visiblePassword 라 글자는 가려지지 않습니다. 다만 이것이 모든 키보드에서 영문으로 열리는지는 아직 실기기로 다 확인하지 못했습니다.
2. 그래도 한글이 들어오면 같은 자리 영문으로 읽기
두벌식 자판에서 ㅁ 은 A 자리, ㅊ 은 C 자리입니다. 그래서 입력칸에 한글이 들어오면 같은 키의 영문으로 바꿔서 칸에 보여 주고 그 값으로 확인합니다. 한글은 자모가 합쳐져 음절이 되므로(C + B = 츄) 음절은 초성·중성·종성으로 풀어서 바꿉니다.
// 츄 → ㅊ + ㅠ → c + b
int v = c - 0xAC00;
int cho = v / (21 * 28), jung = (v % (21 * 28)) / 28, jong = v % 28;
천지인 같은 다른 배열에서는 맞지 않지만, 그때는 「코드가 맞지 않습니다」 로 다시 입력받을 뿐이라 지금보다 나빠지지 않습니다.
3. 「TV 에 코드가 안 보여요 · 코드 다시 띄우기」 버튼
코드가 TV 에 아예 안 보이는 경우도 있습니다. TV 가 다른 외부입력에 가 있으면 셋톱 화면의 코드를 볼 수 없습니다. 예전엔 이때 할 수 있는 게 취소뿐이었습니다. 이제는 버튼 하나로 페어링 세션을 새로 열어 코드를 다시 띄웁니다.
다음에 볼 숫자
이번 수정과 함께 취소할 때 어디까지 입력했는지를 기록하도록 했습니다.
| 값 | 뜻 |
|---|---|
empty |
한 글자도 안 넣고 취소 — 코드가 안 보였거나 몰랐음 |
partial |
몇 글자 넣다 취소 — 입력이 막혔을 가능성 |
full |
다 넣고 취소 |
after_wrong |
틀린 코드 안내를 본 뒤 취소 |
again |
코드 다시 띄우기 |
1.2.18 은 10월 6일에 올렸습니다. 일주일 뒤 이 값으로 「자판 문제였는지, 코드가 안 보이는 문제였는지」 를 나눠 보고 이어서 적겠습니다.
정리
- 버그를 고친 뒤 다른 실패 사유가 오르면 같은 표 안에서 사람들이 다음 단계로 옮겨 간 것인지부터 봅니다. 숫자 하나만 보면 「나빠졌다」 로 읽힙니다.
- 영문·숫자 코드를 받는 입력칸은
text로 두지 않습니다. 한국어 사용자에게는 첫 글자부터 막힙니다. - 같은 화면을 가진 앱이 여럿이면, 한 앱에서 고친 입력 문제를 나머지에도 바로 옮깁니다. 이번엔 나흘 늦었습니다.
이 글에 나온 앱은 U+TV 리모컨(Google Play) 입니다.