king6cong d9ba82cc2c fix for iOS 8: includes is undefined | 8 years ago | |
---|---|---|
ReactNativePermissions.xcodeproj | 8 years ago | |
permissions | 8 years ago | |
LICENSE | 8 years ago | |
RCTConvert+RNPStatus.h | 8 years ago | |
RCTConvert+RNPStatus.m | 8 years ago | |
README.md | 8 years ago | |
ReactNativePermissions.android.js | 8 years ago | |
ReactNativePermissions.h | 8 years ago | |
ReactNativePermissions.ios.js | 8 years ago | |
ReactNativePermissions.m | 8 years ago | |
ReactNativePermissions.podspec | 8 years ago | |
package.json | 8 years ago |
Request user permissions from React Native (iOS only - android coming soon)
The current supported permissions are:
const Permissions = require('react-native-permissions');
//...
//check the status of a single permission
componentDidMount() {
Permissions.getPermissionStatus('photo')
.then(response => {
//response is one of: 'authorized', 'denied', 'restricted', or 'undetermined'
this.setState({ photoPermission: response })
});
}
//request permission to access photos
_requestPermission() {
Permissions.requestPermission('photo')
.then(response => {
//returns once the user has chosen to 'allow' or to 'not allow' access
//response is one of: 'authorized', 'denied', 'restricted', or 'undetermined'
this.setState({ photoPermission: response })
});
}
//check the status of multiple permissions
_checkCameraAndPhotos() {
Permissions.checkMultiplePermissions(['camera', 'photo'])
.then(response => {
//response is an object mapping type to permission
this.setState({
cameraPermission: response.camera,
photoPermission: response.photo,
})
});
}
// this is a common pattern when asking for permissions.
// iOS only gives you once chance to show the permission dialog,
// after which the user needs to manually enable them from settings.
// the idea here is to explain why we need access and determine if
// the user will say no, so that we don't blow our one chance.
// if the user already denied access, we can ask them to enable it from settings.
_alertForPhotosPermission() {
Alert.alert(
'Can we access your photos?',
'We need access so you can set your profile pic',
[
{text: 'No way', onPress: () => console.log('permission denied'), style: 'cancel'},
this.state.photoPermission == 'undetermined'?
{text: 'OK', onPress: this._requestPermission.bind(this)}
: {text: 'Open Settings', onPress: Permissions.openSettings}
]
)
}
//...
Permission statuses - authorized
, denied
, restricted
, or undetermined
Permission types - location
, camera
, microphone
, photo
, contacts
, event
, reminder
, bluetooth
, notification
, or backgroundRefresh
Method Name | Arguments | Notes |
---|---|---|
getPermissionStatus |
type |
- Returns a promise with the permission status. Note: for type location , iOS AuthorizedAlways and AuthorizedWhenInUse both return authorized |
requestPermission |
type |
- Accepts any permission type except backgroundRefresh . If the current status is undetermined , shows the permission dialog and returns a promise with the resulting status. Otherwise, immediately return a promise with the current status. Note: see below for special cases |
checkMultiplePermissions |
[types] |
- Accepts an array of permission types and returns a promise with an object mapping permission types to statuses |
getPermissionTypes |
none | - Returns an array of valid permission types |
openSettings |
none | - Switches the user to the settings page of your app (iOS 8.0 and later) |
canOpenSettings |
none | - Returns a boolean indicating if the device supports switching to the settings page |
Note: Permission type bluetooth
represents the status of the CBPeripheralManager
. Don’t use this if you’re only using CBCentralManager
requestPermission
also accepts a second parameter for types location
and notification
.
location
: the second parameter is a string, either always
or whenInUse
(default).notification
: the second parameter is an array with the desired alert types. Any combination of alert
, badge
and sound
(default requests all three)
///example
Permissions.requestPermission('location', 'always')
.then(response => {
this.setState({ locationPermission: response })
})
Permissions.requestPermission('notification', ['alert', 'badge'])
.then(response => {
this.setState({ notificationPermission: response })
})
npm install --save react-native-permissions