更新记录

1.0.0(2026-07-25)

首次发布,全局注入直接调用uni的Api即可,全面兼容uniappx跟uniapp,被拒后引导用户跳转系统设置页,用于解决软件在运行时,未见向用户告知权限申请的目的,华为等上架被拒问题


平台兼容性

uni-app(3.8.0)

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

uni-app x(5.03)

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

安卓权限申请目的说明 Demo

满足华为等安卓应用市场上架要求,IOS上架没有此要求故未做处理:申请权限时同步告知用户申请目的

核心能力:在 App 启动时全局注册一次监听,之后任意业务代码申请权限(含 uni.chooseImageuni.getLocation 等),都会自动弹出原生层用途说明,业务页无需再引用组件

兼容:

  • uni-app x 见下方使用说明
  • uni-app(Vue2 / Vue3)— 见下方使用说明

使用方式(uni-app x)

  1. 修改说明文案:uni_modules/permission-tips/permissionTipsConfig.uts
  2. App.uvue 已全局注册,保持如下即可:
import { PermissionTips } from '@/uni_modules/permission-tips/permissionTipsConfig.uts'
import { startPermissionPurposeTips, stopPermissionPurposeTips } from '@/uni_modules/permission-tips'

onLaunch(() => {
  // #ifdef APP-ANDROID
  startPermissionPurposeTips(PermissionTips)
  // #endif
})

onExit(() => {
  // #ifdef APP-ANDROID
  stopPermissionPurposeTips()
  // #endif
})
  1. 业务代码正常申请权限;若需「拒绝后再次点击引导去设置」:
import {
  shouldGuidePermissionSetting,
  onPermissionRequestFail,
  clearPermissionDenied
} from '@/uni_modules/permission-tips/permissionGuide.uts'

const perms = ['android.permission.CAMERA']
if (shouldGuidePermissionSetting('camera', '相机', perms)) return
uni.chooseImage({
  count: 1,
  sourceType: ['camera'],
  success: () => { clearPermissionDenied('camera') },
  fail: () => { onPermissionRequestFail('camera', '相机', perms) }
})

使用方式(uni-app,Vue2/Vue3)

  1. 把整个 uni_modules/permission-tips 拷入 uni-app 项目
  2. 参考 examples/App.vue.exampleApp.vue 注册全局监听
  3. examples/pages/index/index.vue 拷到项目页面,并在 pages.json 注册
{
  "path": "pages/index/index",
  "style": {
    "navigationBarTitleText": "权限申请说明"
  }
}

完整 Demo 已覆盖 permissionTipsConfig 全部权限按钮,并接入 permissionGuide.js 拒绝引导。

真机验证

  1. HBuilderX 制作 自定义调试基座(或云打包)
  2. 安装到 Android 真机
  3. 打开 Demo 页,点击各权限按钮
  4. 系统授权框弹出时,顶部(避开状态栏)应同步出现圆角用途说明白卡片

注意:

  • 已授权权限再次申请时,系统框不出现,说明也不会出现(符合预期)
  • 请在系统设置中先撤销权限再测
  • manifest 已配置 targetSdkVersion: 34,修改后需重新制作自定义基座

目录说明

路径 作用
uni_modules/permission-tips 全局监听 + 原生说明弹层
uni_modules/permission-tips/permissionTipsConfig.uts uni-app x 权限文案配置
uni_modules/permission-tips/permissionTipsConfig.js uni-app 权限文案配置
uni_modules/permission-tips/permissionTips.js uni-app 相册存储避免重复
uni_modules/permission-tips/permissionGuide.uts uni-app x 拒绝后引导设置
uni_modules/permission-tips/permissionGuide.js uni-app 拒绝后引导设置
pages/index/index.uvue uni-app x 完整权限 Demo
examples/pages/index/index.vue uni-app 完整权限 Demo
examples/App.vue.example uni-app App.vue 接入示例

文案规范建议

  • 写清「用途」,避免空泛套话
  • 与隐私政策、实际功能一致,审核会核对
  • 支持简单 HTML:<b><br/><font color>

隐私、权限声明

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

"<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_EXTERNAL_STORAGE\"/>", "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>", "<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>", "<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\"/>", "<uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\"/>", "<uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"/>", "<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>", "<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>", "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>", "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>", "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", "<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>", "<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>", "<uses-feature android:name=\"android.hardware.camera\" android:required=\"false\"/>"

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

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