๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ

React native permmision

youngdeok 2023. 3. 2. 19:24

๊ธฐํƒ€ ํŠœ๋‹์„ ํ•˜๋ ค๋ฉด ์ผ๋‹จ ๋งˆ์ดํฌ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ค˜์•ผํ•œ๋‹ค. ๋งˆ์ดํฌ๋ฅผ ํ†ตํ•ด์„œ ๋“ค์–ด์˜จ ์†Œ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์†Œ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

react-native-permissions๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๊ฒƒ์ด๋‹ค.

 

$ npm install --save react-native-permissions

target 'YourAwesomeProject' do

  # …

  permissions_path = '../node_modules/react-native-permissions/ios'

  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

์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ๋“ค์ธ๋ฐ, ์ด์ค‘ microphone์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. podfile์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

<key>NSAppleMusicUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSBluetoothPeripheralUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSCalendarsUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSCameraUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSContactsUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSFaceIDUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSLocationAlwaysUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSLocationTemporaryUsageDescriptionDictionary</key>
  <dict>
    <key>YOUR-PURPOSE-KEY</key>
    <string>YOUR TEXT</string>
  </dict>
  <key>NSLocationWhenInUseUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSMicrophoneUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSMotionUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSPhotoLibraryUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSPhotoLibraryAddUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSRemindersUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSSpeechRecognitionUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSSiriUsageDescription</key>
  <string>YOUR TEXT</string>
  <key>NSUserTrackingUsageDescription</key>
  <string>YOUR TEXT</string>

์ด๊ฒƒ ์—ญ์‹œ ์‚ฌ์šฉํ•  ๊ถŒํ•œ๋“ค๋งŒ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๋‚œ ๊ฐ™์€๊ฒฝ์šฐ <string>YOUR TEXT</string> <key>NSMicrophoneUsageDescription</key>๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. info.plist์— ์ถ”๊ฐ€.

์‚ฌ์šฉ

useEffect(() => {
    const requestPermission = () => {
      request(PERMISSIONS.IOS.MICROPHONE).then(response => {
        console.log(response);
      });
    };
    requestPermission()
    
  }, []);

์ด ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚œ๋‹ค๋ฉด

xcode → product → clean build

Workaround for use_frameworks! issues

If you use use_frameworks!, add this at the top of your Podfile, and uncomment the line corresponding to your CocoaPods version:

`use_frameworks!

Convert all permission pods into static libraries

pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}

installer.pod_targets.each do |pod| if pod.name.eql?('RNPermissions') || pod.name.start_with?('Permission-') def pod.build_type; # Uncomment the line corresponding to your CocoaPods version # Pod::BuildType.static_library # >= 1.9 # Pod::Target::BuildType.static_library # < 1.9 end end end end`

android ์— ๋Œ€ํ•œ ์ •๋ณด๋„ ํ•„์š”ํ•œ๋ฉด~

https://flamingotiger.github.io/frontend/ReactNative/react-native-permissions/

 

React native Permissions ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ ํ™•์ธํ•˜๊ธฐ

์‹œ์ž‘ํ•˜๊ธฐReact native permissions ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์ด ๊ธฐ๊ธฐ์—์„œ ๊ถŒํ•œ์ด ํ—ˆ์šฉ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” React native์— ๋‚ด์žฅ๋œ PermissionsAndroid ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ

flamingotiger.github.io

๊ถŒํ•œ flow์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์žˆ์œผ๋‹ˆ ํ•„์š”ํ•˜๋ฉด ํ™•์ธ

npm: react-native-permissions

 

react-native-permissions

An unified permissions API for React Native on iOS, Android and Windows. Latest version: 3.7.3, last published: 2 days ago. Start using react-native-permissions in your project by running `npm i react-native-permissions`. There are 203 other projects in th

www.npmjs.com