← 글 목록

notes

Android - 런타임 권한

Manifest와 런타임 권한 요청·거절 후 처리 흐름 정리.

카메라·알림·위치를 Manifest에만 적고 넘어갔다가, 런타임 다이얼로그에서 막힌 적이 한두 번이 아니다. 요즘 권한은 설치 시 ≠ 사용 시다.

Android

  • Manifest <uses-permission>
  • Android 6+ 위험 권한은 런타임 요청
  • 알림은 13+ POST_NOTIFICATIONS 별도
val launcher = registerForActivityResult(RequestPermission()) { granted ->
    if (granted) openCamera() else /* 설정으로 유도 */
}
launcher.launch(Manifest.permission.CAMERA)

거절 후 다시 묻기 전에 shouldShowRequestPermissionRationale을 본다. “다시 묻지 않음”이면 설정 화면으로.

iOS

Info.plist 사용 설명 문자열(NSCameraUsageDescription 등)이 없으면 그냥 크래시/거절.

AVCaptureDevice.requestAccess(for: .video) { ok in
    DispatchQueue.main.async { /* UI */ }
}

알림은 UNUserNotificationCenter.requestAuthorization.

내가 지키는 순서

기능 버튼 누른 직후에 요청한다. 앱 켜자마자 권한 폭탄은 거절률만 올린다.