안드로이드 마이크 권한

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

"iOS에서는 getUserMedia({audio:true}) 호출 시 마이크 권한 팝업이 정상적으로 뜨는데, Android에서는 팝업 자체가 뜨지 않습니다. Android WebView는 호스트 앱이 WebChromeClient.onPermissionRequest()에서 오디오 리소스를 명시적으로 grant해야 하는데, 이 부분이 누락된 것으로 보입니다. 카메라(device.openCamera)는 지원되는데 마이크만 안 되는 것도 이 가설과 일치합니다.

Android(WebView): 호스트 앱(토스)이 WebChromeClient.onPermissionRequest()를 명시적으로 구현해서 오디오 리소스에 대한 권한을 넘겨줘야만 마이크 권한 요청이 동작합니다. 이는 두 개 층이 각각 별도로 충족되어야 하는 구조로, iOS나 데스크톱에는 없는 Android WebView만의 특징입니다. 이걸 구현 안 해두면 웹 쪽에서 아무리 getUserMedia를 호출해도 권한 요청 자체가 조용히 무시되고, 팝업은 절대 뜨지 않습니다. (에러도 안 나고 그냥 멈춰있는 것처럼 보임)

즉, 토스 앱의 Android용 웹뷰 컨테이너 코드가 카메라(device.openCamera)에 대해서는 이 처리를 구현해뒀지만, 마이크(오디오)에 대해서는 아직 구현해두지 않았을 가능성이 매우 높습니다. iOS에서 되고 Android에서만 안 되는 증상이 이 설명과 정확히 일치합니다.

appName (선택)

englishspeaking

안녕하세요 :slight_smile:
Android 환경에서 동일하게 getUserMedia({ audio: true })를 테스트해본 결과,
마이크 권한 요청이 성공하고 MediaStream audio track 및 실제 입력 레벨까지 정상 확인되었습니다.
혹시 토스앱에 마이크 권한이 꺼져있으신건 아닐지요 ?

구분 :green_apple: 아이폰 (iOS) :robot: 안드로이드 (Android)
OS 권한 체계 [마이크][음성 인식] 권한이 독립적으로 분리되어 존재 [마이크] 권한 1개만 존재 (음성인식 권한 자체가 없음)
웹뷰 음성 변환 방식 애플 Siri 온디바이스 엔진이 웹뷰에서도 텍스트 변환 100% 지원

말씀하신대로 마이크 권한은 이상이 없었네요!

음성인식의 문제였습니다. ios는 자체 엔진이 있어 음성인식이 가능했지만 안드로이드는 없었네요!

외부 음성엔진과 연동을 고려해봐야겠습니다

답변 감사드려요!