원포인트PT Location 권한 관련 정리

리턴되는 상태값 정리

Android
Ios

Android Notification 권한 요청

permissions.js 파일
initNotification()이 시스템 alert를 띄우는게 ios뿐이라서, android는 따로 퍼미션 요청이 가능하도록 추가
PermissionsAndroid.request()를 통해서 android도 시스템 알럿 호출 가능
현재 ClassScreen.js 에서 사용되고있진 않음
export const requestNotificationPermission = async () => { if (Platform.OS === 'android') { PermissionsAndroid.request('android.permission.POST_NOTIFICATIONS'); } initNotification(); };
JavaScript
복사

Android/Ios Notification 권한 체크

ClassScreen.js 파일
온보딩을 타지 않고 들어올 경우, notification 권한 요청을 못 하기 때문에 ClassScreen 도달 시, isInitialize 값을 확인해서 false인 경우 initNotification() 함수 호출
ios의 경우, initNotification()에서 한번도 요청한적 없음 (denied)를 감지할 수 있기 때문에 시스템 알럿 호출. 권한 체크 + 요청 둘 다 가능
android의 경우, denied가 없고 blocked만 리턴하기 때문에 initNotification()이 시스템 알럿 못 띄움. 권한 체크만 가능함
그래서 android의 경우 checkNotifications()를 활용해서 시스템 알럿은 아니지만 커스텀 모달로 권한 설정 요청을 유저에게 안내함
const checkNotificationStatus = async () => { // 푸시 알림 init 여부 확인 if (!isInitialize) { initNotification(); setIsInitialize(true); } // 클래스탭에서 알림 허용 모달 확인 여부 if (checkClassScreenNotification) { // asyncStorage에 있는값, true일 때 모달 호출 checkNotifications().then(({ status }) => { if (status === 'blocked') { disableClassNotificationAlert(); // 이후 false로 변경 openPushSettingAlertModal('class'); } }); }
JavaScript
복사
checkClassScreenNotification의 경우, 처음엔 권한을 허용해도 나중에 권한 끄는 케이스를 대비한다.
초반에 잘 허용해둬서 커스텀 모달은 본 적 없는 유저의 경우, checkClassScreenNotification이 여전히 true로 되어있어서 권한 off 상태에서 클래스탭 다시 들어오면 커스텀 모달이 뜬다.

Android/Ios Location 권한 체크

locationAPI.js 파일
요청은 하지 않고, 말 그대로 각 플랫폼별로 위치 설정 권한 상태값을 확인하기 위한 용도.
ClassScreen.js에서 따로 사용되고있지 않음
export const checkLocationPermissionStatus = async () => { if (Platform.OS === 'android') { const locationPermissionStatus = await checkLocationPermissionStatusAndroid(); return locationPermissionStatus; } if (Platform.OS === 'ios') { const locationPermissionStatus = await checkLocationPermissionStatusIOS(); return locationPermissionStatus; } };
JavaScript
복사

Android/Ios Location 권한 요청

헤일리가 쓰려고 잠깐 만들었던 함수 (locationAPI.js)
getCurrentLocationAndroid(), getCurrentLocationIOS()에 권한 체크 후 권한에 따라 요청까지 진행하는 방식으로 함수가 섞여있길래 그 중에서 권한 요청만 하는 함수만 따로 모아서 한번 만들어봤었음
export const requestLocationPermissionStatus = async () => { if (Platform.OS === 'android') { const locationPermissionStatus = await requestLocationPermissionAndroid(); return locationPermissionStatus; } if (Platform.OS === 'ios') { const locationPermissionStatus = await requestLocationPermissionIOS(); return locationPermissionStatus; } };
JavaScript
복사