鸿蒙开发:权限管理之授权方式

简介: 在实际的应用开发中,合理选择 system_grant和user_grant是平衡功能实现与用户隐私的关键,system_grant 适用于基础功能,简化开发流程;user_grant 用于敏感操作,需重视用户体验和隐私合规。

前言


本文基于Api13。



在之前的文章中,关于权限管理进行了简单的概述,也了解了如何去声明权限,其实关于权限管理,还有一个知识点需要掌握,那就是权限的授权方式。

我们知道权限管理的核心机制是保障用户隐私和数据安全,鸿蒙当中,根据授权方式的不同,分为了 system_grant(系统授权) 和 user_grant(用户授权) 两种模式,在实际的开发中,我们应当根据权限的敏感性和使用场景选择合适的授权方式。


基本概念

system_grant(系统授权)


系统授权权限在应用安装时由系统自动授予,无需用户手动操作,其特点就是低敏感性,通常涉及对用户隐私或设备安全影响较小的权限,如网络访问、后台运行等;还有一个特点就是静默授予,对于用户来说是无感知的,开发者也无需额外处理授权逻辑。


示例权限


ohos.permission.INTERNET(网络访问)
ohos.permission.KEEP_BACKGROUND_RUNNING(保持后台运行)


user_grant(用户授权)


用户授权权限需在应用运行时通过弹窗请求用户手动授权,用户可选择允许或拒绝,其主要特点是,高敏感性,比如涉及用户隐私或设备敏感功能,如位置、摄像头、麦克风等,还有一个特点就是,显式交互,也就是必须通过系统弹窗获取用户同意,用户可随时在设置中撤销授权;最后一个特点就是,必须动态申请,需在代码中调用 API 触发授权请求,并处理授权结果。

示例权限

ohos.permission.LOCATION(获取位置)
ohos.permission.CAMERA(访问摄像头)


主要区别


维度

system_grant

user_grant

授权时机

安装时自动授予

运行时动态申请

用户感知

无感知

需主动确认弹窗

权限敏感度

使用场景

基础功能所需权限

敏感功能所需权限

代码处理

无需运行时逻辑

需调用 API 并处理结果

撤销方式

用户需卸载应用

用户可在设置中随时关闭


选择策略

判断权限敏感度

优先选择 system_grant:若权限不涉及用户隐私如网络请求、读取设备型号,直接声明为系统授权。

必须使用 user_grant:若权限可能泄露用户数据如通讯录、位置、摄像头等,必须动态申请用户授权。

遵循最小权限原则

仅申请必要权限:避免过度申请权限,如天气应用无需麦克风权限。

分阶段申请:在用户触发敏感操作时再申请对应权限,如扫码时再请求摄像头权限。

代码实现规范

声明权限:在module.json5文件中声明所需权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

动态申请 user_grant 权限

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
// 检查权限状态
    let atManager = abilityAccessCtrl.createAtManager()
    let permissions: Permissions[] = ['ohos.permission.CAMERA']
    atManager.requestPermissionsFromUser(this.context, permissions, (err, data) => {
      if (err) {
        console.error('请求权限失败');
      } else if (data.authResults[0] === 0) {
        console.info('用户已授权');
      } else {
        // 处理用户拒绝场景
      }
    });


用户体验优化

解释权限用途:在申请权限前,通过弹窗或界面提示说明权限的必要性,如需要访问位置以提供附近服务。

兼容拒绝场景:若用户拒绝授权,应提供降级功能(如手动输入地址代替自动定位)。


相关总结

在实际的应用开发中,合理选择 system_grant和user_grant是平衡功能实现与用户隐私的关键,system_grant 适用于基础功能,简化开发流程;user_grant 用于敏感操作,需重视用户体验和隐私合规。

还有一点,在权限管理的时候,应当严格遵循最小权限原则,结合动态申请和清晰的用户引导,既保障功能完整性,又避免给用户带来不好体验。

切记,权限在使用的时候才去申请,不要提前申请,还有在项目中禁止滥用权限,否则可能会导致应用下架。

相关文章
|
6天前
|
人工智能 前端开发 物联网
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
28 0
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
|
11天前
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。
|
18天前
|
人工智能 JavaScript 数据安全/隐私保护
鸿蒙开发难题多到崩溃?然而 10 亿终端暗藏财富密码-卓伊凡
鸿蒙开发难题多到崩溃?然而 10 亿终端暗藏财富密码-卓伊凡
47 5
鸿蒙开发难题多到崩溃?然而 10 亿终端暗藏财富密码-卓伊凡
|
21天前
|
人工智能 物联网 Android开发
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
158 92
|
21天前
|
人工智能 物联网 Android开发
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡
65 23
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡
|
21天前
|
存储 人工智能 物联网
【02】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-登录页面LoginView.ets完成-并且详细解释关于arkui关于 CommonConst, commonColor, InputDataModel-优雅草卓伊凡
【02】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-登录页面LoginView.ets完成-并且详细解释关于arkui关于 CommonConst, commonColor, InputDataModel-优雅草卓伊凡
50 14
【02】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-登录页面LoginView.ets完成-并且详细解释关于arkui关于 CommonConst, commonColor, InputDataModel-优雅草卓伊凡
|
21天前
|
人工智能 物联网 编译器
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
46 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
|
22天前
|
前端开发
鸿蒙开发:使用Ellipse绘制椭圆
除了使用Ellipse组件可以一个椭圆之外,我们还可以使用Canvas来绘制一个椭圆,但是相对来说,还是没有Ellipse组件高效,所以,如果说Ellipse组件能够满足需求,还是以Ellipse组件为主。
鸿蒙开发:使用Ellipse绘制椭圆
|
22天前
|
前端开发
鸿蒙开发:使用Circle绘制圆形
绘制矩形也好,圆形也好,大家做为一个了解即可,在有需要用到的场景中,合理的使用即可,毕竟现成的组件,要比自己用别的方式实现要简单的多。
鸿蒙开发:使用Circle绘制圆形
|
22天前
|
前端开发
鸿蒙开发:使用Rect绘制矩形
几何矩形,在实际的开发中,有多种的实现方式,并非一定需要Rect组件,但是,如果有需要用到矩形的场景,建议还是使用Rect组件,因为Rect组件自身携带了很多样式属性,可以满足我们日常的不同的需求。
鸿蒙开发:使用Rect绘制矩形