CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-react-native-permissions

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

Pending
Overview
Eval results
Files

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

Install with Tessl CLI

npx tessl i tessl/npm-react-native-permissions

docs

index.md

notification-permissions.md

permission-checking.md

permission-constants.md

permission-requesting.md

platform-specific-features.md

tile.json