更新记录

1.1.2(2025-12-22)

  • 优化权限信息

1.1.1(2025-12-22)

  • 优化IOS权限

1.1.0(2025-12-22)

  • iOS 新增定位(前台 locationWhenInUse / 始终 locationAlways)与通知(notification / push)权限的检查与申请
  • 统一 iOS 权限名别名归一,保持与返回结构一致
  • 通知检查在 native 侧增加短暂同步等待,便于 checkPermissions 同步返回
查看更多

平台兼容性

uni-app(4.01)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.01)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - -

hmn-permission

一套跨端权限工具,统一封装 Android / iOS / 鸿蒙 的权限检查、申请与跳转设置页,适用于 uni-app 及 uni-app x。

功能特点

  • 同一份 API 覆盖 Android、iOS、鸿蒙(OpenHarmony/HarmonyOS)
  • checkPermissions / requestPermissions / openSystemPermissionPage 三个核心方法,返回统一的 PermissionResult
  • iOS 内置 photo/camera/microphone/location/notification 的别名归一;鸿蒙内置应用详情页多候选兜底
  • 支持在用户勾选“不再询问”时,通过结果中的 doNotAskAgaindeniedDontAskAgainList 引导到系统设置

安装与引入

  • 插件市场直接安装或将代码放入 uni_modules/hmn-permission
  • 页面中引入:import { checkPermissions, requestPermissions, openSystemPermissionPage } from '@/uni_modules/hmn-permission'
  • 调用时需保证页面已启动(如 onLoad / onShow 后),以便 Android/Harmony 拿到有效 Activity/UIAbilityContext

支持的权限名约定

  • Android:可传任意系统权限常量(不限于示例),如 android.permission.CAMERAandroid.permission.RECORD_AUDIOandroid.permission.ACCESS_FINE_LOCATION
    • 相册/媒体在不同版本差异:Android 13+ 建议使用 android.permission.READ_MEDIA_IMAGES / READ_MEDIA_VIDEO / READ_MEDIA_AUDIO,旧版本可用 android.permission.READ_EXTERNAL_STORAGE
    • openSystemPermissionPage 可传需要引导的权限列表
  • iOS:仅支持内置映射到系统 API 的字符串,其他会直接视为拒绝
    • 相册:photo / photos / photoLibrary
    • 相机:camera
    • 麦克风:microphone / mic
    • 定位(前台):location / locationWhenInUse / location_when_in_use
    • 定位(始终):locationAlways / location_always
    • 通知:notification / notifications / push
  • 鸿蒙:传 @ohos.abilityAccessCtrl 的权限名(不局限于示例),如 ohos.permission.CAMERAohos.permission.MICROPHONEohos.permission.LOCATION
    • openSystemPermissionPage 会兜底多种 Settings Ability,引导用户去开启权限

API 说明

checkPermissions(permissions)

  • Android/iOS 同步返回,鸿蒙为 Promise,推荐统一使用 await checkPermissions(...)
import { checkPermissions } from '@/uni_modules/hmn-permission'

const res = await checkPermissions(['android.permission.CAMERA'])
if (!res.allGranted) {
  // TODO: 给出引导
}

requestPermissions(permissions)

  • 申请权限并返回 Promise<PermissionResult>
import { requestPermissions, openSystemPermissionPage } from '@/uni_modules/hmn-permission'

const res = await requestPermissions(['android.permission.CAMERA'])
if (!res.allGranted && res.doNotAskAgain) {
  // 用户勾选“不再询问”,引导去系统设置
  openSystemPermissionPage(['android.permission.CAMERA'])
}

openSystemPermissionPage(permissions?)

  • 打开系统权限设置页;Android 支持传入需要高亮/引导的权限列表,iOS 无视参数直接跳转 App 设置,鸿蒙返回 Promise 可 await
    • iOS 的通知检查为了保持同步,在 native 侧做了短暂等待;

PermissionResult 结构

  • allGranted:是否全部授权
  • grantedList / deniedList / deniedDontAskAgainList:按状态分组的权限列表
  • doNotAskAgain:是否存在“不再询问”
  • statesMap<string, PermissionState> / Record<string, PermissionState>,可按传入的原始权限名取状态

注意事项

  • 请在 manifest.json(Android uses-permission、iOS InfoPlist usage description、鸿蒙 module.json5 权限声明)中提前声明需要的权限
  • 避免一次申请过多与业务无关的权限,遵循最小授权原则
  • 如需展示自定义提示,可先 checkPermissions 再决定是否触发 requestPermissions

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。