GPS_및_Camera_권한_요청_처리_방식 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
💥 GPS 및 Camera 권한 요청 처리 방식
문제 정의
Nature Album 프로젝트에서 HomeScreen에서 카메라와 GPS 권한을 요청하는 로직을 어디에 위치시킬지에 대한 문제에 직면했다.
앱이 시작되면 MainActivity에서 HomeScreen을 띄우고, HomeScreen의 카메라 버튼을 클릭할 때 카메라 권한을 요청한 후, 권한이 허용되면 카메라를 실행한다. 그러나 권한 요청 로직을 어디에서 처리해야 하는지, 그리고 권한이 허용된 후 화면 전환을 어떻게 할지에 대한 문제가 발생했다.
주요 쟁점
- MainActivity에서 권한 요청을 처리할지, HomeScreen Composable에서 처리할지에 대한 결정
- Composable의 UI와 비UI 로직 간의 역할 분리
- 권한 요청 이후 화면 전환 로직 구현
문제 해결 방법
권한 요청 로직을 처리할 수 있는 여러 가지 방법을 검토하고, 각 방법의 장단점과 구현 방법을 비교하여 최적의 해결책을 도출하였다. 아래는 고려된 주요 해결 방법이다.
1. Composable 내부에서 권한 요청 관리하기
LaunchedEffect
와rememberCoroutineScope
를 사용하여 권한 요청을 비동기적으로 처리한다.- Composable에서 권한 요청 실행:
rememberLauncherForActivityResult
를 사용해 권한을 요청하고, 그 결과에 따라 UI를 업데이트한다. - 장점: 코드가 간단하며, Composable 내부에서 권한 로직과 UI를 바로 연계할 수 있다.
- 단점: 권한 로직이 UI와 섞이므로 코드가 복잡해질 수 있으며, Composable의 역할을 벗어날 수 있다.
2. 별도의 권한 요청 화면을 Composable로 구현하기
- 권한 요청 전담
PermissionScreen
을 생성하고,rememberLauncherForActivityResult
를 사용해 권한 요청 로직을 추가한다. - Navigation을 사용해 HomeScreen에서 PermissionScreen으로 이동하고, 권한이 허용되면 HomeScreen으로 돌아오도록 한다.
- Navigation 구현⇒ 권한이 승인되면
onPermissionGranted
콜백을 통해 HomeScreen으로 이동하도록 설정한다. - 장점: 권한 요청 로직이 HomeScreen에서 완전히 분리되어 구조가 명확해진다.
- 단점: 별도의 화면을 추가하기 때문에 다소 복잡할 수 있으며, 권한 요청 UI가 필요 없는 경우 추가 UI가 불필요하게 느껴질 수 있다.
3. 권한 요청을 Activity로 위임하기
- 권한 요청 Activity 생성: 권한 요청을 처리하는
PermissionActivity
를 생성하고, 결과를 반환하도록 구성한다. - Composable에서 Activity 호출:
ActivityResultLauncher
를 통해PermissionActivity
를 호출하여, 권한 승인 여부에 따라 후속 작업을 진행한다. - 장점: Activity 생명주기를 활용해 권한 요청과 UI 로직을 완전히 분리할 수 있어 구조가 명확하다.
- 단점: 별도 Activity를 생성하므로 코드 관리가 다소 복잡해질 수 있으며, 화면 전환에 따른 UX가 다소 부자연스럽게 느껴질 수 있다.