找回密码
 立即注册
查看: 587|回复: 0

openharmony应用开发权限申请详解

[复制链接]

8

主题

9

帖子

80

积分

注册会员

Rank: 2

积分
80
发表于 2024-4-23 13:02:04 | 显示全部楼层 |阅读模式
在开发应用时,经常需要配置应用的权限,以便实现对系统资源的访问。本文对如何在 OpenHarmony 系统中配置应用权限,以及权限的等级进行归纳总结。

一、权限及其等级介绍:
在申请目标权限前,我们需要先阅读访问控制开发概述-权限的工作流程,对权限的工作流程有基本的了解后,再结合以下权限的具体说明,判断应用能否申请目标权限。官方应用开发文档应用权限列表链接:https://docs.openharmony.cn/page ... /permission-list.md

浏览应用权限列表,对每一个应用权限的介绍如下,例如,

####################################
ohos.permission.USE_BLUETOOTH    (权限名称)

允许应用查看蓝牙的配置。           (权限常用的场景)

权限级别:normal                       (权限级别APL(Ability Privilege Level))

授权方式:system_grant               (授权方式)

ACL使能:TRUE                            (是否能够通过ACL授权)

起始版本:8

#####################################

1、权限级别:权限的等级分为normal、system_basic和system_core三个等级,这与应用的APL(Ability Privilege Level)等级分为normal、system_basic和system_core是对应。默认情况下,应用的APL等级都为normal等级。normal等级是应用权限最低的等级,当应用处于normal等级时,无法申请system_basic和system_core等级的权限;system_core等级是应用权限最高的等级,其次是system_basic,当应用处于system_core等级时,可以申请system_basic和normal等级的权限。
(1)修改应用的APL等级,首先找到openharmony的SDK存放的目录,本文以API10为例,找到API10 文件在电脑存放的路径,如...\10\toolchains\lib  进入到相应的lib文件夹中,找到UnsgnedReleasedProfileTemplate.json文件,用记事本或者其他工具打开,找到如下代码处,


###################################

"bundle-name":"**************",
        "apl":"normal",
        "app-feature":"hos_normal_app"
###################################
修改“apl”对应的值,如将“normal”改为“system_core”,将文件保存,退出,同时DevEco Studio中打开的工程需要同步刷新,并重新签名,使得后续打开或者新建的工程应用处于最高级,可以申请任何等级的权限。

2、授权方式:根据授权方式的不同,权限授权类型可分为system_grant(系统授权)和user_grant(用户授权)。ystem_grant(系统授权)意味着,当在申请权限的配置文件申请权限后,直接重新签名编译后,直接通过使用即可;user_grant(用户授权):当在申请权限的配置文件申请权限后,还需要调用接口@ohos.abilityAccessCtrl,使用 requestPermissionsFromUser() 方法请求相应的权限使得在首次使用该应用时,使用动态弹框授权方式,为用户提供手动授权的入口,拉起以UI界面询问用户是否同意开启该权限,只有用户点击同意开权限,才可以算正式开通并使用。

3、是否能够通过ACL授权:当应用的APL(Ability Privilege Level)等级较低,却想申请一个较高应用等级的权限时,如应用的默认权限等级为normal,当应用需要申请system_basic和system_core等级的权限时,有两种方法。
(1)提高应用权限等级APL(Ability Privilege Level),即1.(1)中的方法,去修改应用对应等级;
(2)查看该权限是否能够通过ACL授权,“ACL使能:TRUE /FALSE”是为true表示可以进行ACL使能,不用修改应用权限等级APL,而申请等级更高权限,具体方法:
首先找到openharmony的SDK存放的目录,本文以API10为例,找到API10 文件在电脑存放的路径,如...\10\toolchains\lib  进入到相应的lib文件夹中,找到UnsgnedReleasedProfileTemplate.json文件,用记事本或者其他工具打开,找到如下代码处,

###################################

"acls":{
        "allowed-acls":[
            "************",
            "***********"
        ]
    },

###################################

在 "allowed-acls"参数数组中,填上需要进行跨等级(ACL授权)授权的权限名称将文件保存,退出,同时DevEco Studio中打开的工程需要同步刷新,并重新签名。

4、系统应用:在应用开发时,在调用某些接口时,会提醒需要申请那些权限,并告知只允许系统应用调用。那么我们需要将应用设置为系统应用,具体方法:
打开OpenHarmony SDK所在目录(可通过DevEco Studio菜单栏中单击File > Settings > OpenHarmony SDK界面查看 )。在SDK目录下,进入Toolchains > {Version} > lib文件夹,打开“UnsignedReleasedProfileTemplate.json”文件。

本文以API10为例,找到API10 文件在电脑存放的路径,如...\10\toolchains\lib  进入到相应的lib文件夹中,找到UnsgnedReleasedProfileTemplate.json文件,用记事本或者其他工具打开,找到如下代码处,

###################################

"bundle-name":"**************",
        "apl":"normal",
        "app-feature":"hos_normal_app"
###################################
修改“app-feature”对应的值,如将“hos_normal_app”改为“hos_system_app”,将文件保存,退出,同时DevEco Studio中打开的工程需要同步刷新,并重新签名,使得后续打开或者新建的工程应用处于系统应用。

参考:1、https://docs.openharmony.cn/page ... F%E5%A3%B0%E6%98%8E
2、https://docs.openharmony.cn/page ... 8%E7%BB%93%E6%9E%84

二、申请权限流程:

1、配置文件声明权限
以stage模型为例:

在开始使用某个权限之前,我们需要在应用的配置文件module.json5配置文件中声明所需的权限。打开应用的配置文件,位置通常src/main/module.json5
如:

"requestPermissions": [
      {
        "name": "ohos.permission.READ_IMAGEVIDEO"
      }
    {
        "name": "**********************"
      }    ]

其中,"requestPermissions"与"abilities"是"module"同一等级的参数,可能需要自己添加。
申请时,需要清楚所申请权限的等级,是否需要修改应用等级APL等。


2、是否需要动态授权
权限授权类型可分为system_grant(系统授权)和user_grant(用户授权)。若为system_grant(系统授权),则只在配置文件中声明所需的权限,系统自动授权。

当应用需要访问用户的隐私信息或使用系统能力时,涉及的权限 授权方式通常为user_grant 类型,需要调用接口@ohos.abilityAccessCtrl,使用 requestPermissionsFromUser() 方法请求相应的权限,

参考链接:https://docs.openharmony.cn/page ... e%E6%A8%A1%E5%9E%8B


三、总结
我们可以在 OpenHarmony 系统中配置应用的权限。首先,在应用的配置文件中声明所需的权限,并根据所申请的权限的等级,是否要进行修改应用等级,包括APL和是否设为系统应用;然后,在应用的代码中请求权限,如果权限授权方式为user_grant(用户授权),则需要在代码中额外拉起动态窗请求用户授权,若为system_grant(系统授权),则只在配置文件中声明所需的权限,系统自动授权;最后,根据权限请求结果进行相应的处理。




回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则