An unified permissions API for React Native on iOS, Android and Windows.
MIT License
Bot releases are visible (Hide)
Published by zoontek over 1 year ago
Published by zoontek over 1 year ago
Published by zoontek over 1 year ago
reactNativePermissionsIOS.json
config file (closes #753)Published by zoontek over 1 year ago
react-native.config.js
file in the npm package (#752 by @johnf)cosmiconfig
dependency by read-pkg
(fixes this issue)Published by zoontek over 1 year ago
useEffect(() => {
const listener = AppState.addEventListener('change', (status) => {
if (Platform.OS === 'ios' && status === 'active') {
request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)
.then((result) => console.log(result))
.catch((error) => console.log(error));
}
});
return listener.remove;
}, []);
Can safely be replaced by:
useEffect(() => {
if (Platform.OS === 'ios') {
request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)
.then((result) => console.log(result))
.catch((error) => console.log(error));
}
}, []);
Published by zoontek over 1 year ago
react-native setup-ios-permissions
commandThis release come with a new permission handler linkage system for iOS: the react-native setup-ios-permissions
command. No need to update your Podfile
file anymore, everything is now handled by your package.json
.
The benefits from this solution are many, but the main ones are that it should fixes Xcode cache issues and the well-known use_frameworks
issue (no more workaround needed! 🎉)
📌 The "old way" will continue to work until the next major update, but it has been removed from the latest documentation since this is not the preferred way anymore.
To migrate, remove all the extra code from your Podfile
(and the use_frameworks
workaround if you used it):
- # 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
target 'MyAwesomeApp' do
# …
- permissions_path = '../node_modules/react-native-permissions/ios'
- pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
- pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
- pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
- pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
Add a reactNativePermissionsIOS
config in your package.json
:
{
"reactNativePermissionsIOS": [
"Camera",
"LocationWhenInUse",
"Notifications",
"SpeechRecognition"
]
}
Then run react-native setup-ios-permissions
and pod install
. That's all! ✨
P.-S. As these commands must be run each tome each time you update this config, delete your node_modules
directory or update this library, I highly recommand to use a postinstall
script to simplify this:
{
"reactNativePermissionsIOS": [
"Camera",
"LocationWhenInUse",
"Notifications",
"SpeechRecognition"
],
"devDependencies": {
"pod-install": "0.1.38"
},
"scripts": {
"postinstall": "react-native setup-ios-permissions && pod-install"
}
}
react-native-paper
v5):Published by zoontek about 2 years ago
postinstall
(https://github.com/zoontek/react-native-permissions/commit/db9ffd0a97e0803fd166aeef7d559e8e33c62984)Published by zoontek over 2 years ago
android.permission.BODY_SENSORS_BACKGROUND
android.permission.NEARBY_WIFI_DEVICES
android.permission.READ_MEDIA_AUDIO
android.permission.READ_MEDIA_IMAGES
android.permission.READ_MEDIA_VIDEO
Published by zoontek over 2 years ago
⚠️ You have to target at least SDK 33 to perform the request:
buildscript {
ext {
buildToolsVersion = "33.0.0" // <- set at least 33.x
minSdkVersion = 21
compileSdkVersion = 33 // <- set at least 33
targetSdkVersion = 33 // <- set at least 33
// …
Published by zoontek over 2 years ago
android.permission.UWB_RANGING
permissionSharedPreferences
usage on Android (enables support for Ask next time setting or Only this time grant status - more informations in https://github.com/zoontek/react-native-permissions/pull/696 pull request thread)ℹ️ It should not be breaking if you followed the previous flow.
SharedPreferences
(a trick that break Ask next time setting and Only this time grant status), to determine if a permission is BLOCKED
without requesting it.BLOCKED
(see https://github.com/facebook/react-native/issues/30158). It's a flaw in the Android permission system, not specific to this library or React Native.Published by zoontek over 2 years ago
Published by zoontek over 2 years ago
providesAppSettings
support in NotificationSettings
(#678 by @cwhenderson20)Published by zoontek almost 3 years ago
ACCESS_MEDIA_LOCATION
permission (#669 by @hectoruiz)Published by zoontek about 3 years ago
Published by zoontek about 3 years ago
Published by zoontek over 3 years ago
PERMISSIONS
constants in Jest mock (#628 by @1natsu172)Published by zoontek over 3 years ago
requestMultiple
not handling BLOCKED
state properly (#609 by @Iskander508)Published by zoontek over 3 years ago
BluetoothPeripheral
permission handler for Xcode 12.5+ (Fix #590)Published by zoontek over 3 years ago
mavenCentral()
as jcenter()
is shutting downPublished by zoontek over 3 years ago
Microphone
iOS permission handler to use [AVAudioSession sharedInstance]
(Fix #571)