EEltaCrew
홈 › 블로그

TV 페어링 코드 창에서 사용자가 떠난 이유: 6자리 코드와 한글 자판

게시 2026-10-06실측 기준 2026-10-05읽는 시간 약 4분elta · EltaCrew

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일에 올렸습니다. 일주일 뒤 이 값으로 「자판 문제였는지, 코드가 안 보이는 문제였는지」 를 나눠 보고 이어서 적겠습니다.

정리

이 글에 나온 앱은 U+TV 리모컨(Google Play) 입니다.

AndroidEditText키보드GA4TV 리모컨

함께 읽기

로또 용지 QR 인식 성공이 0건이었던 이유: 기록하지 않은 경로는 실패처럼 보인다로또 앱 주간 보고에서 QR 화면을 연 사람은 19명인데 인식 성공은 0건이었습니다. 스캐너가 고장 난 게 아니라, 진짜 용지 QR 이 지나가는 경로에 기록이 하나도 없었습니다. 측정 구멍을 찾은 과정, 같은 기능 앱 4개와 비교한 결과, 스캔 엔진을 번들로 바꾼 이유, 고친 뒤 1주일 숫자를 정리합니다.지도 왼쪽 아래 로고를 누르면 앱이 꺼졌다: 네이버 지도 SDK 와 AppCompat 테마로또 판매점 지도 앱의 Crashlytics 에 「You need to use a Theme.AppCompat theme」 크래시가 4건 올라왔습니다. 사용자가 아니라 Play 사전 출시 보고서의 테스트 로봇이 지도 왼쪽 아래 NAVER 로고를 누른 것이었습니다. 원인, 앱 전체 테마를 바꾸지 않고 지도만 감싼 수정, 다크 모드에서 생긴 두 번째 문제를 정리합니다.광고 SDK 초기화가 끝나기 전에 광고를 요청하면 꺼진다: 막는 장치를 만들고도 세 번 다시 나온 이유운영 중인 앱에서 「MobileAds.initialize must be called」 크래시를 처음 고친 뒤에도 같은 크래시가 다른 모양으로 세 번 더 나왔습니다. 초기화 완료를 기다리는 장치는 있었지만, 시작 시점에 켜지는 값, 동의만 보고 켜지는 값, 그 장치를 거치지 않는 새 광고 자리가 빈틈이었습니다. 각 경우의 원인과 23개 앱 전수 점검 결과를 정리합니다.