Unified permissions API for React Native on iOS, Android and Windows platforms
npx @tessl/cli install tessl/npm-react-native-permissions@5.4.0React Native Permissions provides a unified permissions API for React Native applications across iOS, Android, and Windows platforms. It abstracts platform-specific permission handling differences and provides a consistent API with clear permission status results.
npm install react-native-permissionsimport {
PERMISSIONS,
RESULTS,
check,
request,
checkMultiple,
requestMultiple,
checkNotifications,
requestNotifications,
openSettings,
type Permission,
type PermissionStatus,
type NotificationsResponse
} from "react-native-permissions";For CommonJS:
const {
PERMISSIONS,
RESULTS,
check,
request,
checkMultiple,
requestMultiple,
checkNotifications,
requestNotifications,
openSettings
} = require("react-native-permissions");Default import (contains all APIs):
import RNPermissions from "react-native-permissions";
// Access via RNPermissions.check, RNPermissions.PERMISSIONS, etc.import {
PERMISSIONS,
RESULTS,
check,
request,
checkMultiple,
requestNotifications
} from "react-native-permissions";
// Check single permission
const cameraStatus = await check(PERMISSIONS.IOS.CAMERA);
if (cameraStatus === RESULTS.GRANTED) {
console.log("Camera permission granted");
}
// Request permission with rationale
const micStatus = await request(PERMISSIONS.ANDROID.RECORD_AUDIO, {
title: "Microphone Permission",
message: "App needs microphone access to record audio",
buttonPositive: "OK",
buttonNegative: "Cancel"
});
// Check multiple permissions at once
const statuses = await checkMultiple([
PERMISSIONS.IOS.CAMERA,
PERMISSIONS.IOS.MICROPHONE,
PERMISSIONS.IOS.PHOTO_LIBRARY
]);
// Request notifications with specific options
const notificationResult = await requestNotifications(['alert', 'badge', 'sound']);
console.log(notificationResult.status, notificationResult.settings);React Native Permissions is built around several key components:
PERMISSIONS object containing platform-specific permission identifiersRESULTS object defining possible permission statesCore functionality for checking the current status of device permissions. Returns status without requesting permission from the user.
function check(permission: Permission): Promise<PermissionStatus>;
function checkMultiple<P extends Permission[]>(
permissions: P
): Promise<Record<P[number], PermissionStatus>>;Request permissions from the user with optional rationale dialogs. Handles the native permission request flow.
function request(permission: Permission, rationale?: Rationale): Promise<PermissionStatus>;
function requestMultiple<P extends Permission[]>(
permissions: P
): Promise<Record<P[number], PermissionStatus>>;
type Rationale = RationaleObject | (() => Promise<boolean>);
interface RationaleObject {
title: string;
message: string;
buttonPositive: string;
buttonNegative?: string;
}Specialized handling for notification permissions with granular control over notification types and settings.
function checkNotifications(): Promise<NotificationsResponse>;
function requestNotifications(
options?: NotificationOption[],
rationale?: Rationale
): Promise<NotificationsResponse>;
interface NotificationsResponse {
status: PermissionStatus;
settings: NotificationSettings;
}
type NotificationOption =
| 'alert'
| 'badge'
| 'sound'
| 'carPlay'
| 'criticalAlert'
| 'provisional'
| 'providesAppSettings';iOS location accuracy control, Android alarm permissions, and other platform-specific functionality.
// iOS location accuracy
function checkLocationAccuracy(): Promise<LocationAccuracy>;
function requestLocationAccuracy(options: LocationAccuracyOptions): Promise<LocationAccuracy>;
// iOS photo picker
function openPhotoPicker(): Promise<void>;
// Android alarm permissions
function canScheduleExactAlarms(): Promise<boolean>;
function canUseFullScreenIntent(): Promise<boolean>;
// Settings access
function openSettings(type?: 'application' | 'alarms' | 'fullscreen' | 'notifications'): Promise<void>;Platform-specific permission identifiers organized by operating system. Each platform provides different permission types.
interface PermissionsConstants {
ANDROID: AndroidPermissionMap;
IOS: IOSPermissionMap;
WINDOWS: WindowsPermissionMap;
}
declare const PERMISSIONS: PermissionsConstants;// Union of all platform permission types
type Permission = AndroidPermission | IOSPermission | WindowsPermission;
// Possible permission states
type PermissionStatus = 'unavailable' | 'blocked' | 'denied' | 'granted' | 'limited';
// iOS location accuracy levels
type LocationAccuracy = 'full' | 'reduced';
interface LocationAccuracyOptions {
purposeKey: string;
}
// Notification settings object
interface NotificationSettings {
alert?: boolean;
badge?: boolean;
sound?: boolean;
carPlay?: boolean;
criticalAlert?: boolean;
provisional?: boolean;
providesAppSettings?: boolean;
lockScreen?: boolean;
notificationCenter?: boolean;
}
// Permission status constants
declare const RESULTS: {
readonly UNAVAILABLE: 'unavailable';
readonly BLOCKED: 'blocked';
readonly DENIED: 'denied';
readonly GRANTED: 'granted';
readonly LIMITED: 'limited';
};