@ capgo/ 电容- 许可
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-permissions在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 添加@capgo/capor-permissions到我的 Capacitor app 并把它连接起来。" 代理设置指南 • 妇女 主机磁共振
@ capgo/ 电容- 许可 给予Capacitor Apps一个TypeScript API,以检查和请求iOS,Android,和web上的运行时间权限. 与其单独布线每个特性插件或猜测平台特定状态代码,不如使用单一的一组权限名称和规范状态(granted, (中文(简体) ), denied, (中文(简体) ), blocked, (中文(简体) ), limited, (中文(简体) ), unavailable) (中文(简体) ). 本地运单保持倾斜: 插件船没有 uses-permission 条目或强制的Info.plist字符串,所以存储审查只查看您的应用程序声明的内容.
特征
- 一个
PermissionName用于相机、位置、通知、媒体、联系人和更多跨平台的信息 check, (中文(简体) ),request, (中文(简体) ),checkMultiple,以及requestMultiple与共享AppPermissionState结果- 机器人
shouldShowRationale拒绝后重发警告 openSettings当访问被屏蔽时用于应用程序或通知设置requestPreciseLocationiOS和ACCESS_FINE_LOCATION安卓号- 通过浏览器实现所支持类型的 Web 执行权限 API
- 可选
scripts/apply-permissions.mjs只添加您需要的 Android 和 iOS 声明
使用大小写
- 在允许相机或麦克风访问之前打开屏幕
- 运行启动审计
checkMultiple并显示缺失权限的单个登机流程 - 状态时将用户发送到系统设置
blocked之后openSettings - 在登记出推码前请求通知许可
- 当地图特性需要时, 由缩小位置升级到精确位置
文档
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | 应要求 |
政策:
- 新的插件从版本开始
8.0.0(8号电站基线). - 对更古老的Capacitor主机的后向相容性按需支持.
安装
npm install @capgo/capacitor-permissions
npx cap sync
与 Bun 键 :
bun add @capgo/capacitor-permissions
bunx cap sync
iOS 设置
该插件不会在您的应用程序中注入使用描述 。 每笔 PermissionName 您在运行时调用, 将匹配的密钥添加到 ios/App/App/Info.plist (定制用户界面字符串):
| 权限 | Info.plist 密钥 |
|---|---|
camera | NSCameraUsageDescription |
microphone | NSMicrophoneUsageDescription |
photoLibrary | NSPhotoLibraryUsageDescription |
photoLibraryAddOnly | NSPhotoLibraryAddUsageDescription |
contacts | NSContactsUsageDescription |
calendar | NSCalendarsUsageDescription, (中文(简体) ), NSCalendarsFullAccessUsageDescription |
reminders | NSRemindersUsageDescription, (中文(简体) ), NSRemindersFullAccessUsageDescription |
locationWhenInUse | NSLocationWhenInUseUsageDescription |
locationAlways | NSLocationWhenInUseUsageDescription, (中文(简体) ), NSLocationAlwaysAndWhenInUseUsageDescription |
bluetooth | NSBluetoothAlwaysUsageDescription |
motion | NSMotionUsageDescription |
speechRecognition | NSSpeechRecognitionUsageDescription, (中文(简体) ), NSMicrophoneUsageDescription |
appTrackingTransparency | NSUserTrackingUsageDescription |
notifications iOS上使用系统通知许可流;API本身不需要额外的使用字符串. 权限, 如 activityRecognition, (中文(简体) ), phone, (中文(简体) ), sms,而Android风格的媒体分割不适用于iOS和报告 unavailable 检查时.
您可以从插件 Repo 自动应用上面的密钥 :
node node_modules/@capgo/capacitor-permissions/scripts/apply-permissions.mjs \
--project . \
--permissions camera,microphone,notifications,locationWhenInUse,photoLibrary
(点 --project 在您的 Capacitor 应用程序根, 包含 ios/ 财务报告和审定财务报表 android/. ) (中文(简体) )
机器人设置
图书馆 AndroidManifest.xml 声明 没有 <uses-permission> 条目。 只添加您的应用程序的用途 android/app/src/main/AndroidManifest.xml。插件目标 分数 24 (Android 7.0) 除非你的项目超过 minSdkVersion。 。 。 .
| 权限 | 典型 uses-permission 名称 |
|---|---|
camera | android.permission.CAMERA |
microphone, (中文(简体) ), speechRecognition | android.permission.RECORD_AUDIO |
photoLibrary, (中文(简体) ), mediaImages | READ_MEDIA_IMAGES, (中文(简体) ), READ_MEDIA_VISUAL_USER_SELECTED, (中文(简体) ), READ_EXTERNAL_STORAGE (遗产) |
photoLibraryAddOnly | WRITE_EXTERNAL_STORAGE (遗产) |
contacts | READ_CONTACTS |
calendar | READ_CALENDAR, (中文(简体) ), WRITE_CALENDAR |
locationWhenInUse | ACCESS_COARSE_LOCATION, (中文(简体) ), ACCESS_FINE_LOCATION |
locationAlways | 上加号数 ACCESS_BACKGROUND_LOCATION |
bluetooth | BLUETOOTH, (中文(简体) ), BLUETOOTH_ADMIN, (中文(简体) ), BLUETOOTH_CONNECT, (中文(简体) ), BLUETOOTH_SCAN |
motion, (中文(简体) ), activityRecognition | ACTIVITY_RECOGNITION |
notifications | POST_NOTIFICATIONS (Android 13+) (韩语) |
phone | READ_PHONE_STATE |
sms | READ_SMS, (中文(简体) ), RECEIVE_SMS |
mediaAudio | READ_MEDIA_AUDIO, (中文(简体) ), READ_EXTERNAL_STORAGE |
mediaVideo | READ_MEDIA_VIDEO, (中文(简体) ), READ_EXTERNAL_STORAGE |
reminders 财务报告和审定财务报表 appTrackingTransparency 在此 API 中不是 Android 运行时间权限并返回 unavailable。 。 。 .
用同样的 apply-permissions.mjs 脚本 as on iOS 将声明合并到您的应用程序列表中 .
网络设置
无明显变化。 支持的权限使用 navigator.permissions 及相关的API(camera, (中文(简体) ), microphone, (中文(简体) ), notifications, (中文(简体) ), locationWhenInUse· ; locationAlways 仅用于前景地理定位的地图。 其他人员返回 unavailable。 。 。 . openSettings 未在网上执行.
使用量
import { Permissions } from '@capgo/capacitor-permissions';
export async function ensureCamera(): Promise<boolean> {
const { status } = await Permissions.check({ permission: 'camera' });
if (status === 'granted') {
return true;
}
const { status: afterRequest } = await Permissions.request({ permission: 'camera' });
return afterRequest === 'granted';
}
在显示登入屏幕前检查多个权限 :
const { statuses } = await Permissions.checkMultiple({
permissions: ['camera', 'microphone', 'notifications'],
});
const missing = Object.entries(statuses).filter(([, s]) => s !== 'granted');
Android 报告时 denied,在再次请求前显示上下文:
const { shouldShow } = await Permissions.shouldShowRationale({ permission: 'camera' });
if (shouldShow) {
// Show your own explanation UI, then:
await Permissions.request({ permission: 'camera' });
}
如果状态是 blocked,将用户发送到设置 :
await Permissions.openSettings({ type: 'application' });
示例应用程序
这个 example-app/ 项目练习 PermissionName应用声明,同步本地项目,然后:
cd example-app
bun install
bun run start
API 密码
check(...)request(...)checkMultiple(...)requestMultiple(...)shouldShowRationale(...)openSettings(...)requestPreciseLocation()getPluginVersion()- 接口
- 类型异名
Capacitor apps的跨平台权限 API.
检查(...)
check(options: PermissionOptions) => Promise<PermissionStatusResult>
检查一个权限的当前状态而不提示用户 .
| 参数 | 类型 |
|---|---|
options | PermissionOptions |
回返情况: Promise<PermissionStatusResult>
自: 8.0.0 (单位:千美元)
请求(...)
request(options: PermissionOptions) => Promise<PermissionStatusResult>
请求用户允许 。 在Android上,在需要时显示系统对话框. 在iOS上,触发了被映射能力的平台授权流.
| 参数 | 类型 |
|---|---|
options | PermissionOptions |
回返情况: Promise<PermissionStatusResult>
自: 8.0.0 (单位:千美元)
检查复数(...)
checkMultiple(options: MultiplePermissionOptions) => Promise<MultiplePermissionStatusResult>
检查多个权限而不提示 .
| 参数 | 类型 |
|---|---|
options | MultiplePermissionOptions |
回返情况: Promise<MultiplePermissionStatusResult>
自: 8.0.0 (单位:千美元)
请求复数(...)
requestMultiple(options: MultiplePermissionOptions) => Promise<MultiplePermissionStatusResult>
依次请求多个权限, 因此对话框不会在相上方显示 .
| 参数 | 类型 |
|---|---|
options | MultiplePermissionOptions |
回返情况: Promise<MultiplePermissionStatusResult>
自: 8.0.0 (单位:千美元)
应显示理由(...)
shouldShowRationale(options: PermissionOptions) => Promise<ShouldShowRationaleResult>
Android在再次请求之前是否应该显示一个理由.
回返 { shouldShow: false } 在iOS和网络.
| 参数 | 类型 |
|---|---|
options | PermissionOptions |
回返情况: Promise<ShouldShowRationaleResult>
自: 8.0.0 (单位:千美元)
打开设置(...)
openSettings(options?: OpenSettingsOptions | undefined) => Promise<void>
打开应用程序或通知设置屏幕.
在网络上拒绝 UNIMPLEMENTED。 。 。 .
| 参数 | 类型 |
|---|---|
options | OpenSettingsOptions |
自: 8.0.0 (单位:千美元)
预览( )
requestPreciseLocation() => Promise<PermissionStatusResult>
问确切位置.
在iOS上,当在使用时已经得到授权时,请求临时完全准确.
Android上的请求 ACCESS_FINE_LOCATION。 。 。 .
网络上,在可能时提示后返回地理定位权限状态 .
回返情况: Promise<PermissionStatusResult>
自: 8.0.0 (单位:千美元)
获取 PluginVersion ()
getPluginVersion() => Promise<PluginVersionResult>
返回平台执行版本标记 .
回返情况: Promise<PluginVersionResult>
自: 8.0.0 (单位:千美元)
接口
权限状态
实现单一许可状态.
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
status | AppPermissionState | 请求许可的现状 . | 8.0.0 (单位:千美元) |
权限选项
检查或请求单一许可的选项 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
permission | PermissionName | 评估或请求的逻辑权限 . | 8.0.0 (单位:千美元) |
多重任务状态
多个许可状态的结果 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
statuses | Record<string, AppPermissionState> | 权限名称地图到状态 。 密钥符合传入的名称 permissions。 。 。 . | 8.0.0 (单位:千美元) |
多选项
检查或请求多个权限的选项 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
permissions | PermissionName[] | 允许按顺序评估 。 打开 requestMultiple,每个许可都是一个接一个请求. | 8.0.0 (单位:千美元) |
应显示理由
Android原理检查的结果.
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
shouldShow | boolean | 只有当Android在再次请求前显示一个原理对话框时才是正确的. 总是在iOS和网络上作假. | 8.0.0 (单位:千美元) |
打开设置选项
打开系统设置的选项 .
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
type | SettingsType | 要打开的设置屏幕 . | 'application' | 8.0.0 (单位:千美元) |
插件变压器
插件版本有效载荷 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
version | string | 平台执行返回的版本标识符(native 移动, web 在浏览器中). | 8.0.0 (单位:千美元) |
类型异名
Apppermission 状态
每个平台执行返回的规范化许可状态 .
granted:用户允许完全访问.denied:用户尚未准许访问,或者Android可以显示一个理由.blocked:用户拒绝访问,没有设置应用程序就无法再次提示.limited: 部分访问(例如iOS有限相片库或降低位置精确度).unavailable:该权限不在此平台上支持,或未在app express中声明.
'granted' | 'denied' | 'blocked' | 'limited' | 'unavailable'
权限Name
逻辑权限标识符通过iOS,Android,和Web共享.
仅限机器人名称包括 activityRecognition, (中文(简体) ), phone, (中文(简体) ), sms, (中文(简体) ), mediaAudio, (中文(简体) ), mediaImages,以及 mediaVideo。 。 。 .
只有iOS 名称包含 reminders 财务报告和审定财务报表 appTrackingTransparency。 。 。 .
Web 通过浏览器API支持子集(camera, (中文(简体) ), microphone, (中文(简体) ), notifications, (中文(简体) ), locationWhenInUse) (中文(简体) ).
网上, locationAlways 仅是前地地理定位的同名;浏览器不显示背景位置权限.
'camera' | 'microphone' | 'photoLibrary' | 'photoLibraryAddOnly' | 'contacts' | 'calendar' | 'reminders' | 'locationWhenInUse' | 'locationAlways' | 'bluetooth' | 'motion' | 'notifications' | 'speechRecognition' | 'appTrackingTransparency' | 'activityRecognition' | 'phone' | 'sms' | 'mediaAudio' | 'mediaImages' | 'mediaVideo'
记录
构造 T 类型 K 的一组属性类型
{
[P in K]: T;
}
设置类型
设置屏幕类型 openSettings。 。 。 .
'application' | 'notifications'