or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.mdnotification-permissions.mdpermission-checking.mdpermission-constants.mdpermission-requesting.mdplatform-specific-features.md
tile.json

tessl/npm-react-native-permissions

Unified permissions API for React Native on iOS, Android and Windows platforms

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/react-native-permissions@5.4.x

To install, run

npx @tessl/cli install tessl/npm-react-native-permissions@5.4.0

index.mddocs/

React Native Permissions

React 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.

Package Information

  • Package Name: react-native-permissions
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install react-native-permissions

Core Imports

import {
  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.

Basic Usage

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);

Architecture

React Native Permissions is built around several key components:

  • Platform Constants: PERMISSIONS object containing platform-specific permission identifiers
  • Status Constants: RESULTS object defining possible permission states
  • Core Methods: Functions for checking and requesting permissions individually or in batches
  • Specialized Methods: Platform-specific functionality like location accuracy and notification settings
  • Type System: Complete TypeScript definitions for all permissions, statuses, and method signatures
  • Native Bridge: TurboModule implementation connecting JavaScript to native platform APIs

Capabilities

Permission Checking

Core 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>>;

Permission Checking

Permission Requesting

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;
}

Permission Requesting

Notification Permissions

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';

Notification Permissions

Platform-Specific Features

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 Features

Permission Constants

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;

Permission Constants

Core Types

// 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';
};