리턴되는 상태값 정리
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
복사