
…라고 나도 생각하던 시절이 있었다…
expo의 무자비함을 만나기 전까지…
때는 바야흐로…n시간 전
사용자 갤러리 접근 기능을 만들던 때에 벌어진 일이다…
권한 거절 시 작동하는 기능을 만들고 싶던 나는
그만 생각 없이 권한을 BAN 해버린 것이었다.
그것이 모든 고통의 시작인 줄도 모르고…
와 같은 불상사가 생긴 모두를 위한 해결법.
너무나도 단순하지만,
오히려 단순하기에 생각치도 못했던 그 방법
바로 “설정에 들어가서 수동 권한 허용하기!!!”
…기능을 구현해보자!
핵심은 바로 이 녀석.
Linking 기능을 통해 사용자의 …앱 링크 모두와 상호작용할 수 있는 일반적인 인터페이스를 제공…라고 한다.
역시 공식 문서는 뭐라고 하는지 정확히 모르겠다.
1) 프로젝트 폴더에 아래 내용을 install 한다.
npx expo install expo-linking
2) 사용할 Component에 Linking을 import 한다.
import { Linking } from "react-native";
이제 세팅이 끝났다.
만약 사용자가 권한을 거부한 경우, (그러나 해당 권한이 없으면 어플을 사용할 수 없는 경우)
자연스레 설정으로 유도하여 권한을 허용할 수 있도록 한다.
설정을 여는 함수는 다음과 같이 작성하였다.
// 앱 설정 열기
const openAppSettings = () => {
Alert.alert(
"권한 필요",
"앱 설정에서 권한을 변경해주세요.",
[
{
text: "취소",
style: "cancel",
onPress: () => {
navigation.navigate("HomeTab", {
screen: "Home",
});
},
},
{
text: "이동",
onPress: () => Linking.openSettings(),
},
],
{ cancelable: false }
);
};
Linking.openSettings()
이 바로 핵심.
이것을 통해 사용자가 alert에서 이동 버튼을 누르면 설정 화면으로 이동하게 된다!
물론 처음부터 사용자가 군말 없이 권한을 허용할 수 있게 유도하는 것이 좋지만…
청개구리 사용자는 어디에나 있으니 미연에 방지하자!
침고로 같은 맥락에서
expo go 테스트 하다 실수로 권한을 거절했다면
수동으로 설정 > 앱 권한에 들어가 expo 설정을 허용해주자
..실은 이걸 알지 못해서 머리 쥐어뜯으며 헤맸다.
나같은 피해자가 더이상 없도록...🙏