鸿蒙开发:权限管理之权限声明

前言

本文基于Api13。

为什么要有权限管理?最大原因是提高用户对隐私和数据安全的控制权,防止恶意软件滥用权限,试想一下,如果没有权限管理,肯定会有一些恶意软件利用这些默认授权权限,获取用户的敏感信息,对用户隐私构成威胁‌,这是其一,其二就是用户的体验,因为用户无法根据自己的需求授权权限,可能导致不必要的权限被授予,于公于私,于情于理,权限管理都是必须且坚决要执行的。

鸿蒙生态中,可以说,权限管理从始至终都是一贯执行的,毕竟保障用户隐私、系统安全及功能完整性是鸿蒙的核心机制;用户隐私保护,比如访问摄像头、麦克风、位置等敏感数据时,需用户授权,防止恶意应用窃取隐私;系统资源安全,主要从限制应用对系统底层资源如网络、存储的无序访问,避免资源滥用或冲突;而功能完整性,比如部分功能,如网络请求、设备传感器调用等依赖权限授权,未申请权限将导致功能失效;这些权限请求通常是透明的,系统会弹出授权提示,用户可以根据自己的需求和隐私考量来做出选择‌。

基本原则

权限管理固然重要,但是在实际的开发中,仍然要合理且正确的的进行使用,避免不必要的申请,官网针对权限管理,有着以下几个原则:

1、开发的应用,当然这里包含应用引用的三方库,所需权限必须在应用的配置文件中严格按照权限开发指导逐个声明,这个原则非常重要,否则无法申请权限。

2、所申请的权限,尽量满足最小化的原则,严格禁止申请一些非必要的、已废弃的权限;在实际的开发中,如果一个应用,申请了很多的权限,这种情况会使得用户对应用安全性的担忧以及使用体验变差,从而也会影响到应用的安装率和留存率。

3、如果应用,一定要使用请敏感权限时,权限使用理由字段必须填写,敏感权限通常是指与用户隐私密切相关的权限,包括地理位置、相机、麦克风、日历、健身运动、身体传感器、音乐、文件、图片视频等权限;应用敏感权限须在对应业务功能执行前动态申请,满足隐私最小化要求。

4、当用户拒绝授予某个权限后,应用与此权限无关的其他业务功能应允许正常使用,不要直接退出或者产生其它的错误。

声明权限

在实际的开发中,所有的申请权限,必须在项目的配置文件中,逐个声明,这个非常重要,如果没有声明,则功能无法进行使用,声明位置,主要在module.json5配置文件的requestPermissions标签中声明权限。

json 复制代码
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "用于加载网络图片"
      },
      {
        "name": "ohos.permission.CAMERA",
        "reason": "拍摄照片功能所需"
      }
    ]
  }
}

reason字段请定义在string.json文件中。

requestPermissions属性概述:

属性 含义 数据类型 取值范围
name 需要使用的权限名称。 字符串 必填,权限名字,都是系统已定义的。
reason 申请权限的原因。 字符串 可选填写,该字段用于应用上架校验,当申请的权限为user_grant权限时必填,并且需要进行多语种适配。
usedScene 权限使用的场景,该字段用于应用上架校验。包括abilities和when两个子项。- abilities:使用权限的UIAbility或者ExtensionAbility组件的名称。- when:调用时机。 对象 usedScene必填 。- abilities:可选填写 ,可以配置为多个UIAbility或者ExtensionAbility名称的字符串数组。- when:可选填写,但如果配置此字段,只能填入固定值inuse(使用时)、always(始终),不能为空。当申请的权限为user_grant权限时建议填写。

reason字段

按照官方解读,reason字段,应为直白、具体、易理解的完整短句, 主要用于向用户说明应用使用敏感权限的理由,句子要求避免使用被动语态,并以句号结尾。

text 复制代码
建议句式:用于做某事。
样例:以申请相机权限的reason字符串为例。

正例:用于视频通话。
反例:使用相机。

相关总结

如果在某一个子模块中已经申请了权限,那么在主项目无须重复添加,因为权限将在整个应用中进行生效。

本文,主要简单概述了为什么要有权限管理,以及权限管理的声明原则,这些都是基本的概念内容,大家做为了解即可,重要的是怎么声明权限,在什么位置声明权限,这一点需要掌握。

相关推荐
xiaolizi5674896 小时前
安卓远程安卓(通过frp与adb远程)完全免费
android·远程工作
阿杰100016 小时前
ADB(Android Debug Bridge)是 Android SDK 核心调试工具,通过电脑与 Android 设备(手机、平板、嵌入式设备等)建立通信,对设备进行控制、文件传输、命令等操作。
android·adb
梨落秋霜7 小时前
Python入门篇【文件处理】
android·java·python
我不是8神7 小时前
gin与gorm框架知识点总结
ios·iphone·gin
遥不可及zzz9 小时前
Android 接入UMP
android
奋斗的小青年!!10 小时前
Flutter浮动按钮在OpenHarmony平台的实践经验
flutter·harmonyos·鸿蒙
Georgewu10 小时前
【HarmonyOS应用开发】鸿蒙应用实现横竖屏切换的两种方式以及注意事项
harmonyos
Coder_Boy_11 小时前
基于SpringAI的在线考试系统设计总案-知识点管理模块详细设计
android·java·javascript
冬奇Lab12 小时前
【Kotlin系列03】控制流与函数:从if表达式到Lambda的进化之路
android·kotlin·编程语言
冬奇Lab12 小时前
稳定性性能系列之十二——Android渲染性能深度优化:SurfaceFlinger与GPU
android·性能优化·debug