Application permission 이란 앱에서 장치 수준 기능에 대한 액세스를 제어하고 규제하는 수단이다. 일반적으로는 카메라나 위치 정보 접근과 같은 장치의 하드웨어 기능 및 개인 데이터 액세스 기능과 같이 개인 정보에 영향을 미칠 수 있는 기능이 포함된다. React Native 문서에는 Android 권한을 다루는 PermissionsAndroid에 대한 설명은 나와있는데 IOS 관련 내용은 없었다. 보통 두 OS를 공통으로 처리하기 위해 react-native-permissions 라이브러리를 많이 사용한다고 한다.
권한을 요청할 뿐 아니라 권한을 얻지 못했을 때의 동작을 핸들링하려면 직접 처리하는 작업은 꼭 필요해 보인다.
설치
github READ.me를 참고하여 설치할 수 있다.
1
yarn add react-native-permissions
IOS
‘Podfile’을 업데이트 하고 pod install을 실행해야 한다. Podfile에서 아래에 해당하는 블럭을 찾아 추가하고자 하는 권한만 추가하면 된다.
pod 'Permission-AppTrackingTransparency', :path => "#{permissions_path}/AppTrackingTransparency" pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral" pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars" pod 'Permission-Camera', :path => "#{permissions_path}/Camera" pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts" pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID" pod 'Permission-LocationAccuracy', :path => "#{permissions_path}/LocationAccuracy" pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways" pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse" pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary" pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone" pod 'Permission-Motion', :path => "#{permissions_path}/Motion" pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications" pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary" pod 'Permission-PhotoLibraryAddOnly', :path => "#{permissions_path}/PhotoLibraryAddOnly" pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders" pod 'Permission-Siri', :path => "#{permissions_path}/Siri" pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition" pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
end
1
cd ios && pod install
그리고 ‘Info.plist’를 업데이트 해야한다. 권한을 얻는 alert가 뜰 때 나타날 문구를 설정할 수 있다.
check(PERMISSIONS.IOS.LOCATION_ALWAYS) .then((result) => { switch (result) { case RESULTS.UNAVAILABLE: console.log('This feature is not available (on this device / in this context)'); break; case RESULTS.DENIED: console.log('The permission has not been requested / is denied but requestable'); break; case RESULTS.LIMITED: console.log('The permission is limited: some actions are possible'); break; case RESULTS.GRANTED: console.log('The permission is granted'); break; case RESULTS.BLOCKED: console.log('The permission is denied and not requestable anymore'); break; } }) .catch((error) => { // … });
request
한 가지 Persmission을 요청한다. (rationale 파라미터는 Android에서만 사용)