本文档说明集成本插件时,各端需要修改哪些文件、如何配置权限,以及插件内置配置文件的作用。
| 平台 | 配置文件 | 配置方 | 说明 |
|---|---|---|---|
| Android | 宿主 manifest.json |
集成者 | 声明 android.permission.* |
| iOS | 宿主 manifest.json |
集成者 | 声明 NS*UsageDescription |
| Harmony | 插件 utssdk/app-harmony/module.json5(可选:harmony-configs/entry/src/main/module.json5) |
插件内置为主,集成者可切换 full 版或宿主覆盖 |
插件负责运行时检查与申请;Android / iOS 的静态声明必须由宿主项目在 manifest 中完成。Harmony 权限由插件 module 合并进宿主包,集成者按需切换 normal / full 版本。
路径:项目根目录 manifest.json
节点:app-plus.distribute.android.permissions
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\"/>"
]
}
}
}
}
| 插件 Key | Android 权限 | 备注 |
|---|---|---|
camera |
CAMERA |
|
photoLibrary |
READ_MEDIA_IMAGES(API 33+)或 READ_EXTERNAL_STORAGE |
插件按 SDK 自动选择 |
storage |
READ_MEDIA_IMAGES + READ_MEDIA_VIDEO(API 33+)或 WRITE/READ_EXTERNAL_STORAGE |
|
readStorage |
同 photoLibrary / 媒体读权限 |
|
location |
ACCESS_FINE_LOCATION |
|
coarseLocation |
ACCESS_COARSE_LOCATION |
|
microphone |
RECORD_AUDIO |
|
contacts |
READ_CONTACTS |
|
writeContacts |
WRITE_CONTACTS |
|
bluetooth |
BLUETOOTH_CONNECT + BLUETOOTH_SCAN(API 31+)或 BLUETOOTH + BLUETOOTH_ADMIN |
|
phone |
CALL_PHONE |
|
phoneState |
READ_PHONE_STATE |
|
sms |
SEND_SMS |
|
readSms |
READ_SMS |
|
receiveSms |
RECEIVE_SMS |
|
overlay |
无 manifest 条目 | 通过 Settings.canDrawOverlays 检查 |
writeSettings |
无 manifest 条目 | 通过 Settings.System.canWrite 检查 |
READ_MEDIA_*;插件仅在 targetSdkVersion >= 33 时动态申请新媒体权限,否则回退 READ_EXTERNAL_STORAGE(兼容 targetSdk 偏低的自定义基座)overlay、writeSettings 需在 manifest 声明对应 capability 后,通过插件跳转系统设置页授权路径:项目根目录 manifest.json
节点:app-plus.distribute.ios.privacyDescription
{
"app-plus": {
"distribute": {
"ios": {
"privacyDescription": {
"NSCameraUsageDescription": "需要使用相机进行拍照",
"NSMicrophoneUsageDescription": "需要使用麦克风进行录音",
"NSPhotoLibraryUsageDescription": "需要访问相册以选择图片",
"NSPhotoLibraryAddUsageDescription": "需要保存图片到相册",
"NSLocationWhenInUseUsageDescription": "需要获取位置信息",
"NSContactsUsageDescription": "需要访问通讯录",
"NSBluetoothAlwaysUsageDescription": "需要使用蓝牙连接周边设备"
}
}
}
}
}
| 插件 Key | Info.plist 键 | 备注 |
|---|---|---|
camera |
NSCameraUsageDescription |
|
photoLibrary |
NSPhotoLibraryUsageDescription |
|
storage |
NSPhotoLibraryUsageDescription 或 NSPhotoLibraryAddUsageDescription |
映射到相册 |
readStorage |
NSPhotoLibraryUsageDescription |
映射到相册 |
location |
NSLocationWhenInUseUsageDescription |
|
coarseLocation |
NSLocationWhenInUseUsageDescription |
与精确定位共用 |
microphone |
NSMicrophoneUsageDescription |
|
contacts |
NSContactsUsageDescription |
|
writeContacts |
NSContactsUsageDescription |
读写共用 |
bluetooth |
NSBluetoothAlwaysUsageDescription |
必须配置,否则 App 设置页无蓝牙开关 |
iOS 蓝牙涉及两个独立概念:
| 概念 | 设置路径 | 配置要求 |
|---|---|---|
| 系统蓝牙开关 | 设置 → 蓝牙 | 无需 manifest,用户手动打开 |
| App 蓝牙授权 | 设置 → 本 App → 蓝牙,或 设置 → 隐私与安全性 → 蓝牙 | 需 NSBluetoothAlwaysUsageDescription + 重新打包 + App 曾触发弹窗 |
Apple 不提供跳转到「隐私 → 蓝牙」的公开深链;插件 openPermissionSettings('bluetooth') 会打开 App 设置页并配合引导文案。
使用 m-permission-manager 时,一般不需要在 harmony-configs/ 里重复声明权限。
鸿蒙端权限有两种配置路径:
| 方式 | 配置文件 | 适用场景 |
|---|---|---|
| UTS 插件声明(推荐) | uni_modules/m-permission-manager/utssdk/app-harmony/module.json5 |
插件打包为鸿蒙子模块(HAR),权限对整个 App 生效 |
| 宿主工程覆盖 | harmony-configs/entry/src/main/module.json5 |
插件未覆盖的权限、或希望在宿主侧集中管理 |
鸿蒙官方规则:已在子模块中声明的权限,主工程无需重复添加,权限在整个应用中生效。
m-permission-manager 作为 UTS 插件,其 module.json5 会在编译时拷贝为插件子模块的 src/main/module.json5,因此默认情况下宿主不必再配。
当前项目的 harmony-configs/ 主要用于:
| 文件 | 用途 |
|---|---|
AppScope/app.json5 |
包名、版本、图标(HX 4.31+ 也可在 manifest.json → app-harmony 图形界面配置) |
build-profile.json5 |
签名证书(.cer / .p12 / .p7b) |
entry/build-profile.json5 |
release 混淆等构建选项 |
entry/obfuscation-rules.txt |
混淆规则 |
若要在 harmony-configs 中配置权限(可选,非必须):
unpackage/dist/dev/app-harmony/entry/src/main/module.json5 复制完整文件到 harmony-configs/entry/src/main/module.json5module.requestPermissions 节点,其他节点不要删(uni-app 是文件级覆盖,不是 JSON 节点合并)集成 m-permission-manager 时,优先改插件内的
module.json5/module.full.json5,而不是 harmony-configs。
目录:uni_modules/m-permission-manager/utssdk/app-harmony/
| 文件 | 权限数量 | APL 等级 | 用途 |
|---|---|---|---|
module.json5 |
5 项 | normal | 默认生效,调试证书可直接安装 |
module.normal.json5 |
5 项 | normal | 与 module.json5 相同,备份参考 |
module.full.json5 |
9 项 | normal + system_basic | 含相册 / 通讯录,需 ACL 签名 |
权限说明文案:resources/base/element/string.json
| 插件 Key | ohos.permission | 说明 |
|---|---|---|
camera |
CAMERA |
|
microphone |
MICROPHONE |
|
location |
LOCATION |
|
coarseLocation |
APPROXIMATELY_LOCATION |
|
bluetooth |
ACCESS_BLUETOOTH |
| 插件 Key | ohos.permission | APL | 说明 |
|---|---|---|---|
photoLibrary / readStorage |
READ_IMAGEVIDEO |
system_basic | 需 ACL |
storage |
WRITE_IMAGEVIDEO |
system_basic | 需 ACL |
contacts |
READ_CONTACTS |
system_basic | 需 ACL |
writeContacts |
WRITE_CONTACTS |
system_basic | 需 ACL |
module.full.json5 的内容覆盖 module.json5| 场景 | 检查 status | 申请结果 |
|---|---|---|
| 相册 / 通讯录等未在 module.json5 声明 | restricted |
9020003,附未声明说明 |
| 系统设置 | 无对应开关 | 引导使用 uni.chooseImage 或切换 full 版本 |
说明 module.json5 中含有未签名的 system_basic 权限。请确认使用默认 5 项 normal 版本;若已合并 full 版本,需先完成 ACL 与 Profile 签名。
以下插件 Key 在鸿蒙返回 unsupported:phone、phoneState、sms、readSms、receiveSms、overlay、writeSettings。
Android manifest:
"permissions": [
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>"
]
iOS privacyDescription:
"privacyDescription": {
"NSCameraUsageDescription": "需要使用相机",
"NSMicrophoneUsageDescription": "需要使用麦克风"
}
Harmony:默认 module.json5 已包含,无需修改。
Android manifest 增加:
"<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>"
iOS privacyDescription 增加:
"NSBluetoothAlwaysUsageDescription": "需要使用蓝牙连接周边设备"
Harmony:默认 module.json5 已包含 ACCESS_BLUETOOTH。
module.full.json5 覆盖 module.json5READ_MEDIA_IMAGES / READ_MEDIA_VIDEONSPhotoLibraryUsageDescription若仅需选图不上传,推荐使用
uni.chooseImage,三端均无需媒体读写权限。
privacyDescription 后建议删除旧 App 重装,以重新触发授权弹窗module.json5 后需重新签名安装