news 2026/8/9 5:20:16

react navite权限处理:相机、定位、相册、推送权限

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
react navite权限处理:相机、定位、相册、推送权限

React Native 做相机、定位、相册、推送权限管理,推荐不要自己封装 Native 权限,而是统一使用:

react-native-permissions

它统一封装 iOS / Android 权限申请、检查、跳转设置等流程。(NPM)

整体流程:

用户操作 ↓ 业务功能触发 ↓ check权限 ↓ 未授权 → request权限 ↓ granted → 执行业务 denied → 提示原因 blocked → 引导打开系统设置

1. 安装

npm install react-native-permissions cd ios pod install

(NPM)


一、相机权限 Camera

Android

android/app/src/main/AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA"/>

iOS

Info.plist

<key>NSCameraUsageDescription</key> <string>需要使用相机拍摄照片</string>

RN代码

import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions'; async function requestCamera(){ const result = await request( PERMISSIONS.IOS.CAMERA ); if(result === RESULTS.GRANTED){ console.log("可以使用相机"); } if(result === RESULTS.BLOCKED){ console.log("去设置开启"); } }

Android:

request( PERMISSIONS.ANDROID.CAMERA )

二、定位权限 Location

Android

Manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

iOS

Info.plist:

<key>NSLocationWhenInUseUsageDescription</key> <string>用于获取当前位置</string>

如果后台定位:

<key>NSLocationAlwaysUsageDescription</key> <string>后台需要持续定位</string>

代码:

import {PERMISSIONS} from 'react-native-permissions'; async function requestLocation(){ const res = await request( PERMISSIONS.IOS.LOCATION_WHEN_IN_USE ) if(res === RESULTS.GRANTED){ console.log("定位成功") } }

Android:

request( PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION )

三、相册权限 Photo Library

Android 13+

需要:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>

Android 12:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

iOS

Info.plist:

<key>NSPhotoLibraryUsageDescription</key> <string>用于选择图片</string>

代码:

request( PERMISSIONS.IOS.PHOTO_LIBRARY )

Android:

request( PERMISSIONS.ANDROID.READ_MEDIA_IMAGES )

四、推送权限 Notification

推送比较特殊。

需要:

  • 系统通知权限

  • APNs / FCM 注册

  • 推送 Token

推荐:

@react-native-firebase/messaging


iOS

请求通知:

import { requestNotifications } from 'react-native-permissions'; async function notificationPermission(){ const result = await requestNotifications([ 'alert', 'sound', 'badge' ]); console.log(result.status) }

(NPM)


Android 13+

Manifest:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

请求:

request( PERMISSIONS.ANDROID.POST_NOTIFICATIONS )

五、统一权限管理封装

实际项目一般这样写:

src └── permissions ├── camera.js ├── location.js ├── photo.js └── notification.js

例如:

permission.js

import { request, RESULTS } from 'react-native-permissions'; export async function checkPermission(permission){ const result = await request(permission); switch(result){ case RESULTS.GRANTED: return true; case RESULTS.BLOCKED: //打开设置 return false; default: return false; } }

业务调用:

const ok = await checkPermission( PERMISSIONS.IOS.CAMERA ) if(ok){ openCamera() }

六、推荐权限申请时机

不要 App 启动一次申请全部:

打开APP 请求: 相机 定位 相册 通知 用户疯狂点拒绝

体验很差。


推荐:

相机

用户点击:

扫一扫 拍照上传

再请求。


定位

进入地图页面:

附近的人 附近商家 导航

请求。


相册

点击:

上传图片

请求。


通知

登录完成 / 引导页:

开启通知,及时收到消息

请求。


七、生产级权限状态处理

建议封装:

状态处理
GRANTED直接使用
DENIED再次request
BLOCKED弹窗,引导系统设置
LIMITED(iOS)提示用户选择更多权限
UNAVAILABLE设备不支持

react-native-permissions本身提供这些状态。(NPM)


八、常见 RN APP 权限架构

类似微信:

App启动 | |-- 初始化SDK | |-- 登录 | |-- 用户进入功能 | +-- 扫一扫 | | | Camera Permission | +-- 发朋友圈 | | | Photo Permission | +-- 附近 | | | Location Permission | +-- 消息提醒 | Notification Permission

这样通过率和用户体验最好。

如果是 RN 新架构(Fabric + TurboModule)项目,权限层建议独立成 Native Module Service,不要散落在页面组件里。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 5:20:11

合米科技AI sop 防呆摄像头,规避工人操作失误

视频流行为分析如何实现多工位实时预警&#xff5c;合米科技 AI‑SOP 智能作业合规 内容主题 本篇重点 阅读对象摘要 不少制造车间已经完成摄像头部署&#xff0c;但绝大多数视频监控只承担录像存证、事后调阅的作用&#xff0c;面对多工位同时作业场景&#xff0c;很难做到对跳…

作者头像 李华
网站建设 2026/8/9 5:18:08

Java开发者转型AI的工程化优势与实践路径

1. 为什么Java开发者转型AI具有天然优势作为一名在Java领域深耕多年的开发者&#xff0c;当我第一次接触AI领域时&#xff0c;意外发现Java开发经验竟然成为了宝贵资产。Java生态的严谨性和工程化思维&#xff0c;恰恰是AI项目落地最需要的素质。Java开发者最核心的优势在于对复…

作者头像 李华
网站建设 2026/8/9 5:17:50

多语言Web应用URL国际化最佳实践与SEO优化

1. 项目概述在全球化互联网时代&#xff0c;多语言Web应用的URL国际化标识标准化处理已成为开发者必须面对的技术挑战。当用户从不同语言区域访问同一内容时&#xff0c;如何通过URL直观展示语言版本&#xff0c;同时保持SEO友好和系统可维护性&#xff0c;这需要一套完整的解决…

作者头像 李华
网站建设 2026/8/9 5:17:28

大数据价值评估与提升的五大核心维度

1. 大数据价值评估的核心维度在大数据时代&#xff0c;数据已经成为企业最重要的资产之一。但并非所有数据都具有同等价值&#xff0c;我们需要建立科学的评估体系来判断数据的实际价值。根据我多年的大数据项目经验&#xff0c;数据价值评估主要包含以下五个关键维度&#xff…

作者头像 李华
网站建设 2026/8/9 5:15:43

基于VS Code自研数据库工具:告别付费墙,打造个人化高效工作流

1. 项目缘起&#xff1a;当“付费墙”成为效率的绊脚石作为一名常年泡在数据库里的开发者&#xff0c;我对SQL Workbench这类工具的感情很复杂。它们功能强大&#xff0c;界面专业&#xff0c;但每次打开&#xff0c;都感觉像是走进了一个别人的办公室——布局固定&#xff0c;…

作者头像 李华
网站建设 2026/8/9 5:14:48

从电脑宕机到无缝工作流:基于容器与AI的开发者环境连续性方案

1. 项目缘起&#xff1a;一个“进不去”的电脑引发的产品思考那天早上&#xff0c;我像往常一样&#xff0c;准备打开我的MacBook Pro开始一天的工作。按下电源键&#xff0c;熟悉的启动声响起&#xff0c;但随后&#xff0c;屏幕就卡在了那个令人绝望的灰色登录界面。密码输入…

作者头像 李华