Handling permissions in React Native
Your app should encourage the best user experience possible, even after permission denials….remember consent is important 😉
The permissions dialog shown by the system when you call requestPermissions()
says what permission your app wants, but doesn't say why. In some cases, the user might find that puzzling. It's a good idea to explain to the user why your app wants the permissions before you call requestPermissions()
.
Research shows that users are much more comfortable with permissions requests if they know why the app needs them, such as whether the permission is needed to support a core feature of the app or for advertising. As a result, if you’re only using a fraction of the API calls that fall under a permission group, it helps to explicitly list which of those permissions you’re using and why. For example, if you’re only using coarse location, let the user know this in your app description or in help articles about your app.
when we are dealing with building features that include microphone , camera etc… device ask for a prompt that ask for permissions in devices wheather to allow
or deny
the permission…. new devices have option for allow while using app
aswell
read about one-time permission
here , we are diving into permission in react native which deals native permission on AndroidManifest.xml
The so-called “normal” permissions are granted by default when the application is installed as long as they appear in AndroidManifest.xml
devices before SDK version 23
, the permissions are automatically granted if they appear in the manifest, so check
should always result to true
and request
should always resolve to PermissionsAndroid.RESULTS.GRANTED
.
If a user has previously turned off a permission that you prompt for, the OS will advise your app to show a rationale for needing the permission. The optional rationale
argument will show a dialog prompt only if necessary - otherwise the normal permission prompt will appear.
Result strings for requesting permissions
constants that are Available under PermissionsAndroid.RESULTS
:
GRANTED
: 'granted'DENIED
: 'denied'NEVER_ASK_AGAIN
: 'never_ask_again'
Permissions that require prompting the user
READ_CALENDAR
: 'android.permission.READ_CALENDAR'WRITE_CALENDAR
: 'android.permission.WRITE_CALENDAR'CAMERA
: 'android.permission.CAMERA'READ_CONTACTS
: 'android.permission.READ_CONTACTS'WRITE_CONTACTS
: 'android.permission.WRITE_CONTACTS'GET_ACCOUNTS
: 'android.permission.GET_ACCOUNTS'ACCESS_FINE_LOCATION
: 'android.permission.ACCESS_FINE_LOCATION'ACCESS_COARSE_LOCATION
: 'android.permission.ACCESS_COARSE_LOCATION'ACCESS_BACKGROUND_LOCATION
: 'android.permission.ACCESS_BACKGROUND_LOCATION'RECORD_AUDIO
: 'android.permission.RECORD_AUDIO'READ_PHONE_STATE
: 'android.permission.READ_PHONE_STATE'CALL_PHONE
: 'android.permission.CALL_PHONE'READ_CALL_LOG
: 'android.permission.READ_CALL_LOG'WRITE_CALL_LOG
: 'android.permission.WRITE_CALL_LOG'ADD_VOICEMAIL
: 'com.android.voicemail.permission.ADD_VOICEMAIL'USE_SIP
: 'android.permission.USE_SIP'PROCESS_OUTGOING_CALLS
: 'android.permission.PROCESS_OUTGOING_CALLS'BODY_SENSORS
: 'android.permission.BODY_SENSORS'SEND_SMS
: 'android.permission.SEND_SMS'RECEIVE_SMS
: 'android.permission.RECEIVE_SMS'READ_SMS
: 'android.permission.READ_SMS'RECEIVE_WAP_PUSH
: 'android.permission.RECEIVE_WAP_PUSH'RECEIVE_MMS
: 'android.permission.RECEIVE_MMS'READ_EXTERNAL_STORAGE
: 'android.permission.READ_EXTERNAL_STORAGE'WRITE_EXTERNAL_STORAGE
: 'android.permission.WRITE_EXTERNAL_STORAGE'BLUETOOTH_CONNECT
: 'android.permission.BLUETOOTH_CONNECT'BLUETOOTH_SCAN
: 'android.permission.BLUETOOTH_SCAN'BLUETOOTH_ADVERTISE
: 'android.permission.BLUETOOTH_ADVERTISE'ACCESS_MEDIA_LOCATION
: 'android.permission.ACCESS_MEDIA_LOCATION'ACCEPT_HANDOVER
: 'android.permission.ACCEPT_HANDOVER'ACTIVITY_RECOGNITION
: 'android.permission.ACTIVITY_RECOGNITION'ANSWER_PHONE_CALLS
: 'android.permission.ANSWER_PHONE_CALLS'READ_PHONE_NUMBERS
: 'android.permission.READ_PHONE_NUMBERS'UWB_RANGING
: 'android.permission.UWB_RANGING'BODY_SENSORS_BACKGROUND
: 'android.permission.BODY_SENSORS_BACKGROUND'READ_MEDIA_IMAGES
: 'android.permission.READ_MEDIA_IMAGES'READ_MEDIA_VIDEO
: 'android.permission.READ_MEDIA_VIDEO'READ_MEDIA_AUDIO
: 'android.permission.READ_MEDIA_AUDIO'POST_NOTIFICATIONS
: 'android.permission.POST_NOTIFICATIONS'NEARBY_WIFI_DEVICES
: 'android.permission.NEARBY_WIFI_DEVICES'READ_VOICEMAIL
: 'com.android.voicemail.permission.READ_VOICEMAIL',WRITE_VOICEMAIL
: 'com.android.voicemail.permission.WRITE_VOICEMAIL',
const requestCameraPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,
{
title: 'Camera Permission',
message:
'App needs access to your camera ' +
'so you can take pictures.',
buttonNeutral: 'Ask Me Later',
buttonNegative: 'Cancel',
buttonPositive: 'OK',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('You can use the camera');
} else {
console.log('Camera permission denied');
}
} catch (err) {
console.warn(err);
}
};
//Return usage
<Button title="request permissions" onPress={requestCameraPermission} />
happy coding… ;)