API 23(안드로이드 6.0 마시멜로우) 이전에는 앱 설치 시 모든 권한을 일괄 수락해야 했으며, 이는 사용자 약관 미확인으로 인한 개인정보 탈취 등 악용의 소지가 있었습니다. 📜
권한은 위험도에 따라 Normal(자동 부여), Dangerous(개인정보 관련, API 23 이후 런타임 요청 필요), Signature(동일 서명키 앱만 사용)로 분류됩니다. 🛡️
API 23 이후 Dangerous 권한은 런타임 시 사용자에게 명시적 승인을 요청하도록 변경되어 개발자는 해당 로직을 구현해야 합니다. 🚀
Special 권한은 일반 런타임 권한보다 민감하며, 앱 내에서 즉시 허용할 수 없고 사용자가 직접 설정으로 이동하여 허용해야 합니다. ⚙️
권한 요청 플로우는 Manifest 선언, 설명 가능한 UX 디자인, 사용자 대기, 권한 부여 여부 확인(checkSelfPermission), 권한 필요성 설명(shouldShowRequestPermissionRationale), 권한 요청(ActivityResultLauncher), 그리고 최종적으로 기능 구현 또는 우아한 기능 저하(Graceful Degradation)로 구성됩니다. 📝
런타임 권한을 영구적으로 거부한 사용자에게는 앱 설정 화면으로 이동하도록 유도하고, onResume 생명 주기에서 권한 허용 여부를 다시 확인해야 합니다. 🔄
좋은 권한 요청은 사용자 경험을 최우선으로 하여, 필요한 시점에 최소한으로 요청하고, 거부 시에도 우아하게 대안을 제시하는 것입니다. 😊