GPS_및_Camera_권한_요청_처리_방식 - boostcampwm-2024/and04-Nature-Album GitHub Wiki

💥 GPS 및 Camera 권한 요청 처리 방식

문제 정의

Nature Album 프로젝트에서 HomeScreen에서 카메라와 GPS 권한을 요청하는 로직을 어디에 위치시킬지에 대한 문제에 직면했다.

앱이 시작되면 MainActivity에서 HomeScreen을 띄우고, HomeScreen의 카메라 버튼을 클릭할 때 카메라 권한을 요청한 후, 권한이 허용되면 카메라를 실행한다. 그러나 권한 요청 로직을 어디에서 처리해야 하는지, 그리고 권한이 허용된 후 화면 전환을 어떻게 할지에 대한 문제가 발생했다.

주요 쟁점

  1. MainActivity에서 권한 요청을 처리할지, HomeScreen Composable에서 처리할지에 대한 결정
  2. Composable의 UI와 비UI 로직 간의 역할 분리
  3. 권한 요청 이후 화면 전환 로직 구현

문제 해결 방법

권한 요청 로직을 처리할 수 있는 여러 가지 방법을 검토하고, 각 방법의 장단점과 구현 방법을 비교하여 최적의 해결책을 도출하였다. 아래는 고려된 주요 해결 방법이다.

1. Composable 내부에서 권한 요청 관리하기

  • LaunchedEffectrememberCoroutineScope를 사용하여 권한 요청을 비동기적으로 처리한다.
  • 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가 다소 부자연스럽게 느껴질 수 있다.

결과

Composable 내부에서 권한 요청 관리하기로 결정