
应用权限申请 原创
1 应用权限管控概述
简介
系统提供了一种允许应用访问系统资源和能力的通用权限访问方式,来保护系统数据或功能,避免它们被不当或恶意使用。应用权限保护的对象可以分为数据和功能:
- 数据包括用户数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)。
- 功能包括设备功能(如访问摄像头/麦克风、打电话、联网等)、应用功能(如弹出悬浮窗、创建快捷方式等)。
授权方式
根据授权方式的不同,权限类型可分为system_grant(系统授权)和user_grant(用户授权)。
- system_grant(系统授权):system_grant指的是系统授权类型,在该类权限不涉及用户或设备的敏感信息。在应用中申请了system_grant权限后,系统会在用户安装应用时,自动把相应权限授予给应用。
- user_grant(用户授权):user_grant指的是用户授权类型,该类权限涉及到用户或设备的敏感信息。获取该类型权限需要:1)在安装包中声明权限 2)在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才能获取相应权限,从而成功访问操作目标对象。
2 申请应用权限
申请权限的方式
根据不同权限的类型,参考以下流程进行申请:
权限类型 | 授权方式 | 操作路径 |
system_grant | 声明权限 > 访问接口 | |
user_grant | 声明权限 > 向用户申请授权 > 访问接口 | |
受限开放权限 | system_grant | 申请使用受限权限 > 声明权限 > 访问接口 |
受限开放权限 | user_grant | 申请使用受限权限 > 声明权限 > 向用户申请授权 > 访问接口 |
申请权限步骤
(按需)申请使用受限权限
如所需权限不是受限开放的权限,可跳过该步骤。 |
受限开放的权限通常不允许三方应用申请。如果有特殊场景需先参考下述游戏场景常用权限章节,再按照申请使用受限权限进行申请。
声明权限
在module.json5配置文件的requestPermissions标签中声明权限。参考权限声明。
向用户申请user_grant权限
在代码中向用户申请权限。
二次向用户申请授权
当应用通过requestPermissionsFromUser()拉起弹框请求用户授权时,用户拒绝授权。应用将无法再次通过requestPermissionsFromUser拉起弹框。
解决方案:
- 需要用户在系统应用“设置”的界面中,手动授予权限。可参考以下代码直接跳转至设置-本应用权限页。
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
pushParams: context.abilityInfo.bundleName
}
})
- 应用也可以通过调用requestPermissionOnSetting(),直接拉起权限设置弹框,引导用户授予权限,参考二次向用户申请授权。
3 游戏场景常用权限
读写媒体
受限权限中的ohos.permission.WRITE_IMAGEVIDEO、ohos.permission.READ_IMAGEVIDEO两个权限已不对游戏开放,游戏中如需实现保存截图、高光时刻等媒体到本地,或上传设备照片、视频等功能,参考以下无需权限的替代方案:
OAID
开放匿名设备标识符(Open Anonymous Device Identifier, OAID,以下简称OAID):是一种非永久性设备标识符,基于开放匿名设备标识符,可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析。
开发流程与OAID更多信息参考广告标识服务。
如项目module.json5已声明ohos.permission.APP_TRACKING_CONSENT权限,调用requestPermissionsFromUser接口将有如下表现:
|
剪贴板
剪贴板为开发者提供数据的复制粘贴能力。例如:复制文字内容到备忘录中粘贴,复制图库照片到文件管理粘贴,就可以通过剪贴板来完成。API version 12及之后,系统为提升用户隐私安全保护能力,剪贴板读取接口增加权限管控。
如未申请权限,则不可将本应用内数据复制到其他应用进行粘贴。 |
开发步骤
- 剪贴板权限为受限开放权限,请按照上文申请使用受限权限后进行开发。
- 参考使用剪贴板进行复制粘贴。
4 FAQ
应用安装报错9568289, install failed due to grant request permissions failed.
应用未申请相应的权限证书,却试图在配置文件中声明受限权限,将会导致应用安装失败。请按照上述流程申请权限。
如何跳转到系统设置的权限页面?
参考以下代码:
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
pushParams: context.abilityInfo.bundleName
}
})
原文链接:华为开发者文章
更多问题可关注:
鸿蒙游戏官方网站:已有游戏移植-鸿蒙游戏-华为开发者联盟
公开课:华为开发者学堂
