电容许可插件
Capacitor 插件可以检查和请求设备权限,并使用统一的API.
特征
- 🖥️ 跨平台:支持Android,iOS和Web(部分).
- 🧩 统一 API: 检查并请求使用单个API的多个不同权限,而不是为每个选项安装特性插件.
- 🗂️ 已解析目录: 支持蓝牙,日历,相机,联系人,位置,背景位置,麦克风,动作,通知,相片和提醒.
- 🔍 快速免费检查编号:
check(...)方法从不触发许可提示. - 🪶 轻巧: 插件本身不声明任何权限 。 您的应用程序只声明其实际使用的权限 .
- 🤝 兼容性: 与 设置启动器 财务报告和审定财务报表 App 跟踪透明度 插件 .
- 📦 可可花和SPM:支持CocoaPods和Swift软件包管理器用于iOS.
- 🔁 最新数据:总是支持最新的Capacitor版本.
- ✨ 手工业:由地而上地而上以关怀和专长而来,不是要塞或AI生成.
缺少一个功能? 刚刚 打开一个问题 我们看看!
使用大小写
当应用程序需要在一个地方管理多个设备权限时,通常会使用权限插件,例如:
- 登入屏幕: 以快速免费方式检查您的应用程序使用的所有权限状态
check(...)方法,并用一个概览来介绍. - 上下文许可请求:在用户开始视频通话或录音之前,请求摄像头或麦克风许可.
- 背景位置升级: 请求
LOCATION先允许,再升级到LOCATION_ALWAYS之后,按照平台的建议. - 从被拒绝的权限收回: 检测
denied状态并引导用户到应用程序设置中重新启用权限.
兼容性
| 插件版本 | 电容版本 | 状态 |
|---|---|---|
| 0.x.x (中文(简体) ) | >=8.x.x | 积极支持 |
安装
你可以用我们的 AI 辅助设置 以安装插件. 添加数据 超级技能 至您的 AI 工具,使用以下命令:
npx skills add capawesome-team/skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-permissions` plugin in my project.
如果你喜欢 手动设置,通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capawesome/capacitor-permissions
npx cap sync
请注意: 插件本身确实如此 没有 声明任何权限和是否 没有 需要任何 Info.plist 密钥。 您的应用程序必须声明它实际使用的权限( 见下文) 。 这样, 您的应用程序不需要请求权限 .
机器人
权限
将您要检查或请求的权限的列表条目添加到您的 AndroidManifest.xml 文档 application 标签。 如果未宣布许可,则 request(...) 方法以清晰的错误消息拒绝.
| 权限 | 需要列出的条目 |
|---|---|
BLUETOOTH | android.permission.BLUETOOTH_SCAN, (中文(简体) ), android.permission.BLUETOOTH_CONNECT |
CALENDAR | android.permission.READ_CALENDAR, (中文(简体) ), android.permission.WRITE_CALENDAR |
CAMERA | android.permission.CAMERA |
CONTACTS | android.permission.READ_CONTACTS, (中文(简体) ), android.permission.WRITE_CONTACTS |
LOCATION | android.permission.ACCESS_COARSE_LOCATION, (中文(简体) ), android.permission.ACCESS_FINE_LOCATION |
LOCATION_ALWAYS | android.permission.ACCESS_BACKGROUND_LOCATION (加上 LOCATION 条目) |
MICROPHONE | android.permission.RECORD_AUDIO |
MOTION | android.permission.ACTIVITY_RECOGNITION |
NOTIFICATIONS | android.permission.POST_NOTIFICATIONS |
PHOTOS | android.permission.READ_MEDIA_IMAGES, (中文(简体) ), android.permission.READ_MEDIA_VISUAL_USER_SELECTED, (中文(简体) ), android.permission.READ_EXTERNAL_STORAGE (最大 SDK 版本) 32(中文(简体) ) |
REMINDERS | 无法在Android上找到. |
示例数字 :
<!-- Required if you want to use the `BLUETOOTH` permission. -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Required if you want to use the `CALENDAR` permission. -->
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<!-- Required if you want to use the `CAMERA` permission. -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Required if you want to use the `CONTACTS` permission. -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- Required if you want to use the `LOCATION` or `LOCATION_ALWAYS` permission. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required if you want to use the `LOCATION_ALWAYS` permission. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- Required if you want to use the `MICROPHONE` permission. -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Required if you want to use the `MOTION` permission. -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<!-- Required if you want to use the `NOTIFICATIONS` permission. -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Required if you want to use the `PHOTOS` permission. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
iOS系统
隐私描述
将您想要请求的权限的用法描述密钥添加到 ios/App/App/Info.plist 文档。 如果缺少密钥,则 request(...) 方法以清晰的错误消息拒绝.
| 权限 | 需要的Info.plist 密钥 |
|---|---|
BLUETOOTH | NSBluetoothAlwaysUsageDescription |
CALENDAR | NSCalendarsFullAccessUsageDescription (iOS 17+), (中文(简体) ), NSCalendarsUsageDescription (16岁以上) |
CAMERA | NSCameraUsageDescription |
CONTACTS | NSContactsUsageDescription |
LOCATION | NSLocationWhenInUseUsageDescription |
LOCATION_ALWAYS | NSLocationAlwaysAndWhenInUseUsageDescription, (中文(简体) ), NSLocationWhenInUseUsageDescription |
MICROPHONE | NSMicrophoneUsageDescription |
MOTION | NSMotionUsageDescription |
NOTIFICATIONS | 无 |
PHOTOS | NSPhotoLibraryUsageDescription |
REMINDERS | NSRemindersFullAccessUsageDescription (iOS 17+), (中文(简体) ), NSRemindersUsageDescription (16岁以上) |
示例数字 :
<key>NSCameraUsageDescription</key>
<string>The camera is used to take photos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>The microphone is used to record audio.</string>
说明:由于插件引用了所有支持权限的系统框架,App Store Connect可能会要求您在上传您的应用程序时提供额外的使用描述,即使您没有请求这些权限.
配置
此插件不需要配置 .
使用量
以下示例显示如何检查一个或多个权限的状态以及如何向用户请求.
请检查一个或多个权限的状态
使用 check(...) 方法读取一个或多个权限的当前状态。 这种方法从不显示权限提示,因此随时可以安全调用,例如构建登入或设置屏幕:
import { Permission, Permissions } from '@capawesome/capacitor-permissions';
const checkPermissions = async () => {
const { statuses } = await Permissions.check({
permissions: [Permission.Camera, Permission.Microphone],
});
return statuses;
};
请求一个或多个权限
使用 request(...) 用于提醒用户获取一个或多个权限的方法。 已经授予或无法请求在当前平台上的权限不再请求;在这种情况下,会返回当前状态. 在网络上,只有 NOTIFICATIONS 请求权限 :
import { Permission, Permissions } from '@capawesome/capacitor-permissions';
const requestPermissions = async () => {
const { statuses } = await Permissions.request({
permissions: [Permission.Camera, Permission.Microphone],
});
return statuses;
};
API 密码
检查(...)
check(options: CheckOptions) => Promise<CheckResult>
请检查一个或多个权限的当前状态 .
此方法从未显示权限提示 .
| 参数 | 类型 |
|---|---|
options | CheckOptions |
回返情况: Promise<CheckResult>
自: 0.1.0 (中文(简体) )
请求(...)
request(options: RequestOptions) => Promise<RequestResult>
请用户提供一个或多个权限 .
已经授予或无法请求的权限 在当前平台上不再请求。 在这种情况下, 返回当前权限状态.
在Android上,必须在
AndroidManifest.xml 您的应用程序文件 。 否则,该呼吁被拒绝.
在iOS上,必须在
Info.plist 您的应用程序文件 。 否则,该呼吁被拒绝.
在网络上,只有 NOTIFICATIONS 可以请求权限.
对于所有其他权限,当前状态自
浏览器显示相应的权限提示
网络API首次被使用.
| 参数 | 类型 |
|---|---|
options | RequestOptions |
回返情况: Promise<RequestResult>
自: 0.1.0 (中文(简体) )
接口
检查结果
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
statuses | PermissionStatus[] | 检查权限的状态与提供的权限顺序相同. | 0.1.0 (中文(简体) ) |
权限状态
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
permission | Permission | 检查或要求的许可 . | 0.1.0 (中文(简体) ) |
state | PermissionState | 许可状态. | 0.1.0 (中文(简体) ) |
检查选项
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
permissions | Permission[] | 检查权限 . | 0.1.0 (中文(简体) ) |
请求结果
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
statuses | PermissionStatus[] | 所请求的许可状态与所提供的许可顺序相同. | 0.1.0 (中文(简体) ) |
请求选项
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
permissions | Permission[] | 请求权限 . | 0.1.0 (中文(简体) ) |
类型异名
权限状态
'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
数字
权限
| 成员 | 数值 | 说明 | 自兹 |
|---|---|---|---|
Bluetooth | 'BLUETOOTH' | 权限 要使用蓝牙。 在Android 12(API 31级)上,这包括: BLUETOOTH_SCAN 财务报告和审定财务报表 BLUETOOTH_CONNECT 权限。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。在网络上,此权限不可用. | 0.1.0 (中文(简体) ) |
Calendar | 'CALENDAR' | 权限 来读写日历事件。 在iOS 17 上及其后,只写访问被报告为 limited。在网络上,此权限不可用. | 0.1.0 (中文(简体) ) |
Camera | 'CAMERA' | 权限 用摄像机. | 0.1.0 (中文(简体) ) |
Contacts | 'CONTACTS' | 权限 用于读取和写出联系人。 关于iOS 18, 以及后来, 有限访问被报告为 limited。在网络上,此权限不可用. | 0.1.0 (中文(简体) ) |
Location | 'LOCATION' | 权限 在应用程序使用时访问该位置。 在Android 12(API 第31关)上,以及后来,用户可能只允许近似位置访问. 在这种情况下,该州仍被报告为 granted。 。 。 . | 0.1.0 (中文(简体) ) |
LocationAlways | 'LOCATION_ALWAYS' | 权限 即使应用程序处于背景状态,也可以访问该位置。 只有在 LOCATION 已经获得许可。 网络上没有此权限 . | 0.1.0 (中文(简体) ) |
Microphone | 'MICROPHONE' | 权限 用麦克风. | 0.1.0 (中文(简体) ) |
Motion | 'MOTION' | 权限 获取运动和健身数据。 在Android 10(API 29级)上,这包括: ACTIVITY_RECOGNITION 允许。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。在网络上,此权限不可用. | 0.1.0 (中文(简体) ) |
Notifications | 'NOTIFICATIONS' | 权限 以显示通知。 在Android 13(API 33级)上,这包括: POST_NOTIFICATIONS 允许。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。 。 。 . | 0.1.0 (中文(简体) ) |
Photos | 'PHOTOS' | 权限 访问相片库。 在Android 14(API 第34级)以及后来和iOS上,部分访问相片库被报告为 limited。在网络上,此权限不可用. | 0.1.0 (中文(简体) ) |
Reminders | 'REMINDERS' | 权限 读取和写出提醒。 仅在iOS上可用. | 0.1.0 (中文(简体) ) |
平台行为
下表总结了每个平台上每个权限的行为:
| 权限 | 机器人 | iOS系统 | 网页 |
|---|---|---|---|
BLUETOOTH | 封面 BLUETOOTH_SCAN 财务报告和审定财务报表 BLUETOOTH_CONNECT 在Android 12+上出现. 在旧版本,总是 granted。 。 。 . | 覆盖核心蓝牙授权. | 永远 unavailable。 。 。 . |
CALENDAR | 封面 READ_CALENDAR 财务报告和审定财务报表 WRITE_CALENDAR。 。 。 . | 在iOS 17+上,只写访问被报告为 limited。 。 。 . | 永远 unavailable。 。 。 . |
CAMERA | 封面 CAMERA。 。 。 . | 盖相机授权. | 检查已支持 。 请求返回当前状态 . |
CONTACTS | 封面 READ_CONTACTS 财务报告和审定财务报表 WRITE_CONTACTS。 。 。 . | 在iOS 18+上,有限访问报告为: limited。 。 。 . | 永远 unavailable。 。 。 . |
LOCATION | 封面 ACCESS_COARSE_LOCATION 财务报告和审定财务报表 ACCESS_FINE_LOCATION报告为 granted 如果至少已经允许大致进入地点. | 涵盖在使用时的位置授权. | 检查已支持 。 请求返回当前状态 . |
LOCATION_ALWAYS | 封面 ACCESS_BACKGROUND_LOCATION 在Android 10+上出现. 在旧版本,行为像 LOCATION。 。 。 . | 覆盖总是位置授权。 iOS只显示一次升级提示. | 永远 unavailable。 。 。 . |
MICROPHONE | 封面 RECORD_AUDIO。 。 。 . | 覆盖麦克风授权. | 检查已支持 。 请求返回当前状态 . |
MOTION | 封面 ACTIVITY_RECOGNITION 在Android 10+上出现. 在旧版本,总是 granted。 。 。 . | 包括活动授权。 需要一个真正的设备. | 永远 unavailable。 。 。 . |
NOTIFICATIONS | 封面 POST_NOTIFICATIONS 安卓13号+ 在旧版本,总是 granted。 。 。 . | 包括通知授权. | 检查和请求支持 . |
PHOTOS | 封面 READ_MEDIA_IMAGES (和 READ_MEDIA_VISUAL_USER_SELECTED)在Android 13+上,并 READ_EXTERNAL_STORAGE 在旧版本。 部分访问报告为 limited。 。 。 . | 部分访问报告为 limited。 。 。 . | 永远 unavailable。 。 。 . |
REMINDERS | 永远 unavailable。 。 。 . | 包括提醒授权. | 永远 unavailable。 。 。 . |
请求背景位置
这个 LOCATION_ALWAYS 仅应在 LOCATION 已授予许可 :
- 请
LOCATION并解释为什么您需要访问位置. - 批准后,请
LOCATION_ALWAYS允许.
在Android 11上及后期,系统没有显示背景位置的提示. 相反,用户被带到系统设置中来选择"Allow all the time"选项. 如果 LOCATION 尚未获得许可,该系统立即拒绝这项请求.
在iOS上,系统只显示从被使用时到总访问一次的升级提示. 如果用户已经做出决定,则返回当前状态.
从被拒绝的权限收回
如果许可是在 denied 状态,无法再从应用程序中请求它 。 在这种情况下,您可以使用 设置启动器 插件 :
import { SettingsLauncher } from '@capawesome/capacitor-settings-launcher';
const openAppSettings = async () => {
await SettingsLauncher.openAppSettings();
};
App 跟踪透明度
App Track Communications 权限被故意不在此插件中. 使用 App 跟踪透明度 插件替换 .
财务问题
此插件与其他类似插件有何不同?
它将许多设备权限置于一个统一,完全打入的API下——蓝牙,日历,相机,联系人,位置,背景位置,麦克风,运动,通知,相片和提醒——所以你检查和要求它们全部在一个地方. 这个 check(...) 方法从不触发系统提示,插件本身就宣布没有权限,所以您的应用只传送它实际使用的程序。 它的手工制作非常小心,跨越了Android,iOS和Web(部分),并与最新的Capacitor版本保持同步.
这是否 check 方法触发许可提示 ?
不,那个 check(...) 方法从不显示权限提示。 它只读取给定权限的当前状态,因此可以在任何时候安全地调用它,例如构建一个登入或设置屏幕.
为什么 request 用错误拒绝方法 ?
在Android上,必须在 AndroidManifest.xml 您的应用程序文件 。 在iOS上,必须在 Info.plist 您的应用程序文件 。 如果缺少声明 request(...) 方法以清晰的错误消息拒绝。 见 安装 每个许可所需的条目.
我需要在应用程序中声明所有支持的权限吗?
不,插件本身不声明任何权限,也不要求任何Info.plist密钥. 您的应用程序只声明它实际使用的权限 。 这样, 您的应用程序不需要请求权限 .
我如何请求访问背景位置?
请 LOCATION 首先,一旦获得许可,则请求 LOCATION_ALWAYS 允许。 在Android 11上及后期,系统不显示提示背景位置;而是将用户带到系统设置中选择"Allow all the time"选项. 在iOS上,系统只显示从被使用时到总访问一次的升级提示.
如果拒绝许可我该怎么办?
如果许可是在 denied 状态,无法再从应用程序中请求它 。 在这种情况下,您可以使用 设置启动器 插件让他们可以手动授予权限 .
网络上支持哪些权限 ?
在网络上,只有 NOTIFICATIONS 可以检查和请求权限。 这个 CAMERA, (中文(简体) ), LOCATION 财务报告和审定财务报表 MICROPHONE 权限支持检查,同时请求返回当前状态,因为浏览器首次使用相应的网页API时会显示权限提示。 所有其他许可均报告为 unavailable见 平台行为 详细情况.
相关插件
通讯
随时更新有关卡帕韦索姆、Capacitor和Ionic生态系统的最新消息和最新消息,因为我们 《卡帕索克通讯》。 。 。 .
更改日志
见 变动情况。 。 。 .
许可证
见 自由主义。 。 。 .