brunch

You can make anything
by writing

C.S.Lewis

오버레이 권한을 받았는데 오버레이가 안됩니다.

제 폰에선 되는데요??

안녕하세요.

카카오헤어샵 Android 개발자 에이단(aidan)입니다.


원래 저는 두루에 이어서 Compose 관련해서 2번째 글을 작성하려고 했었습니다.

하지만 최근 작업한 오버레이 기능 관련해서 더 흥미로울만한 일을 겪게되어 이렇게 작성합니다.


카카오헤어샵에는 헤어짱이라는 CRM 솔루션 서비스가 있습니다.

해당 서비스에서는 어플리케이션도 제공하죠 이번 작업은 헤어짱 어플리케이션에 알림폰 기능을 추가하며 겪게 되었습니다.


알림폰 기능

알림폰 기능의 핵심은 해당 화면과 같습니다.

1. 전화가 온다.

2. 전화번호를 수집하여 고객인지 확인한다.

3. 고객이라면 오버레이 화면을 띄운다.


해당 루트대로만 따라온다면 어떤 기능이 필요할까요??


전화체크, 전화번호 수집, 오버레이권한 정도가 될 것 같습니다.


개발은 성공적으로 끝났습니다.

관련자들끼리 충분한 테스트도 거쳤고요.

QA 수정사항도 반영한 상태에서 이제 배포만 앞둔 상황이었습니다.


근데 갑자기 기획자분께서 자리에 오셔서 오버레이 화면이 뜨질 않는다며 보여주셨어요. 이때부터 지옥이 시작되었습니다...











1. 디버깅

일단 문제가 생겼으니 디버깅을 해보았습니다.

여러 방면으로 시도했습니다. 제폰(A), 기획자분폰(B), 다른팀원의폰(C) 이렇게 시도를 해보았을때

첫 시도엔 A,C는 잘되고 B는 잘되지 않았습니다.

그래서 B폰을 이용하여 디버깅을 하기로 하고 컴퓨터와 연결 후 프로젝트 빌드를 실행해서 테스트를 하였더니 잘되는 겁니다.

그래서 B폰이 다운받은 빌드가 어떤 건지 분석해 보니 Debug버전 아닌 배포용 release버전을 다운받은걸 확인해서 다시 테스트하기로 하였습니다.

두 번째 시도엔 C만 잘되고 A,B는 잘되지 않았습니다. 그렇습니다. 배포해야 할 빌드에서 문제가 생긴 겁니다.

정말 어이가 없는 이유

C는 왜 잘되며... A,B만 배포해야 할 빌드에서 문제가 생기는지 이제부터 찾아야 합니다.


2. 원인찾기

개발자가 원인을 찾는 방법은 아주 많습니다.

흔히 검색을 하거나 주변에 물어보거나 요즘은 GPT에게도 물어보죠

일단 증상을 확인해 보니 "다른 앱 위에 표시 권한"을 받은 상태여도 오버레이 기능을 사용해야 할 때 권한이 꺼지더라고요. 

해당 소스코드로 "다른 앱 위에 표시 권한"을 체크하는 중이었는데 전화오기전, 전화끊었을때는 True를 전화 오는 중에만 False를 반환한다는 사실을 확인하였습니다.

그래서 일단 키워드를 분리했습니다.

Android Overlay Permission)NotWorking, Denied, Call Cancel, Calling NotWorking 등등

수많은 키워드로 검색을 해도 비슷한 사례가 나오지 않았습니다. 

안드로이드 오픈채팅방, GDG 슬랙채널 등 해당 내용을 질문하기도 했지만 비슷한 사례를 겪으신 분의 답을 들을 수 없었습니다. 

그렇게 GPT와도 2~3일을 씨름하였고 GPT의 답변도 나름 신빙성이 있어서 많은 시도를 하였습니다.

하지만 미처 보지 못하고 신경 쓰지 못했던 기기 제조사별 최적화 해당 부분이 문제가 될지 몰랐습니다.


3. 결과

1번에서 언급했던 핸드폰입니다.

A - 갤럭시 22U

B - 갤럭시 23U

C - LG 벨벳

이렇게 삼성폰은 안되고 LG폰은 되었습니다. OS버전도 14와 12로 나뉘어있어서 저는 처음에 OS버전을 의심했었어요. 하지만 생각지도 못한 곳에서 샘물을 만났습니다.

여러 키워드로 검색해 보다가

"android broadcastreceiver overlay not working" 해당 키워드로 검색했을 때 

https://stackoverflow.com/questions/75228830/android13-system-alert-window-permission-not-checked-in-broadcastreceiver

이런 글을 만납니다. 저희는 CallReceiver 이고 해당 질문자는 SMS 라는것만 제외하면 증상이 정말 동일한 질문을 만났습니다. 아마 해당 문제가 터지고 나서 3일 만에 찾은 결과물인 것 같습니다.

그는 신인가...?

요약하자면 삼성폰에서 발생하는 문제이며 제조사에서 보안문제 때문에 정식스토어 또는 ADB 일 때만 동작하도록 해두었다는 내용입니다. 그러니 직접 빌드했을 때는 문제가 없는데 배포용 APK로 앱을 설치했을 때만 문제가 생겼던 이유입니다.


더 자세히 찾아보니 보이스피싱 등을 방지하기 위한 보안 기능으로 만들었다고 합니다.

많은 보이스피싱용 애플리케이션이 정식스토어가 아닌 APK 다운로드 형태의 설치방식을 가지고 있어서 이런 보안기능이 들어간 것 같습니다.


또 하나의 사실

결국 해당 내용을 통해서 배포용 APK를 플레이스토어에 내부테스트로 올려서 테스트결과 문제가 없는 걸 확인하였습니다.

그리고 이 블로그를 작성하기 위해서 오늘 다시 스택오버플로우 질문을 천천히 다시 읽었는데...

당사자는 3주고생 ㅋㅋㅋㅋㅋㅋ

알고보니 답변자가 제 지인이었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ 당사자는 2~3주를 고생했다고 하네요.

저 또한 먼저 연락해서 물어봤다면 금방 해결할 문제였는데 괜히 더 찾아보다가 3일을 버린 것 같습니다.

제법 경력이 쌓인 상태에서 하나의 기능을 3일 내내 이유를 찾지 못하는 건 정말 오래간만에 경험해 보아 이렇게 블로그로 작성하고자 마음을 먹었습니다.


안드로이드 개발은 제조사이슈도 항상 확인하기


이 글로 인해서 저와 같은 또는 저분과 같은 고생을 덜 하길 빌며 이 글을 마칩니다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari