应用权限申请 原创

游戏技术分享
发布于 2025-5-19 18:04
浏览
0收藏

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拉起弹框。

解决方案:

  1. 需要用户在系统应用“设置”的界面中,手动授予权限。可参考以下代码直接跳转至设置-本应用权限页。






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  
      }  
})
  1. 应用也可以通过调用​​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接口将有如下表现:

  1. 系统默认不向用户弹窗申请授权,应用可直接获取到OAID。
  2. 如果用户在设置-隐私和安全-跨应用关联中手动开启“要求应用请求关联”,则会向用户弹窗申请授权。

剪贴板

剪贴板为开发者提供数据的复制粘贴能力。例如:复制文字内容到备忘录中粘贴,复制图库照片到文件管理粘贴,就可以通过剪贴板来完成。API version 12及之后,系统为提升用户隐私安全保护能力,剪贴板读取接口增加权限管控。

应用权限申请-鸿蒙开发者社区


    如未申请权限,则不可将本应用内数据复制到其他应用进行粘贴。

开发步骤

  1. 剪贴板权限为受限开放权限,请按照上文申请使用受限权限后进行开发。
  2. 参考​​使用剪贴板进行复制粘贴​​。

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  
      }  
})

原文链接:​​华为开发者文章​


更多问题可关注:

鸿蒙游戏官方网站:​​已有游戏移植-鸿蒙游戏-华为开发者联盟​

公开课:​​华为开发者学堂​

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
收藏
回复
举报
回复
    相关推荐