RN을 사용하지 않아 직접적인 코드로 도움드리진 못 하나, Flutter 기준 다음과 같은 흐름으로 진행합니다. RN은 권한을 조금 다르게 관리할 수 있으니, 자세한 건 RN 권한 관련 라이브러리의 문서를 참고하시면 좋습니다.
1. 특정 권한 상태 체크 (권한 request가 아님)
2. 권한 허용일 때 => 특정 트리거 만족 시, 권한 허용 흐름 진행
3. 권한 허용이 아닐 때 => 특정 트리거 만족 시, 권한 request
4. 권한 request 반환값이 다음과 같을 때
4-1. 권한 허용일 때 => 권한 허용 흐름 진행
4-2. 거절일 때 => 아무 동작 X
4-3. 영구 거절일 때 => 허용 유도 팝업 노출 => 버튼 클릭 시 설정 페이지로 이동 => 되돌아왔을 때 권한 request 다시 하기 // 무한 루프 조심
4-4. limit 일 때 (iOS 전용) => 사내 정책에 따름
4-5. restricted 일 때 (iOS 전용) => 사내 정책에 따름
4-6. provisional 일 때 (iOS 전용) => 사내 정책에 따름
사용자가 필요할 때 받는 게 아니라, 앱 시작부터 바로 받아야하는 권한이 있다면 4번부터 시작하시면 됩니다. 일단 4번부터 진행하고, 그 다음 1~3을 대응하시는게 개발하기 편할 겁니다!