本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、受限权限

受限权限是指默认不允许普通应用申请,只有在特殊场景下,通过应用市场(AGC)审核后才能使用的权限。

受限权限的特点

特点 说明
默认不可用 普通应用默认无法申请
需要审核 必须通过AGC审核才能使用
场景限制 仅限特殊场景使用
上架管控 上架时会严格审核

为了保护用户隐私和系统安全,系统将一些敏感度极高的权限设置为受限开放。这些权限如果被滥用,可能对用户造成严重的影响。

申请原则

在申请前,请审视是否符合受限权限的使用场景。开发者应优先使用Picker/控件等替代方案,仅少量符合特殊场景的应用被允许申请受限权限。

二、受限权限列表

可以通过受限开放权限列表查询:

  • 哪些权限属于受限开放

  • 每个权限的可用场景

  • 推荐的替代方案

提示:必须查询受限开放权限列表确认开发的应用是否符合使用场景,如果不符合要求,应用的上架申请将被驳回。

三、申请前的准备工作

在申请受限权限前,需要:

  1. 查阅权限列表:确认要申请的权限是否属于受限开放

  2. 阅读使用场景:每个权限都有明确的可用场景说明

  3. 评估替代方案:是否有Picker/控件等替代方案

  4. 准备申请材料:权限说明文档、视频说明等

如果应用场景不符合要求,但试图在配置文件中声明此类权限,将会导致:

  • 安装失败:应用无法安装

  • 上架驳回:应用市场审核不通过

四、申请步骤

申请流程图

步骤1:确认权限是否受限开放
    ↓
步骤2:在AGC申请Profile文件并申请权限
    ↓
步骤3:下载Profile文件用于签名
    ↓
步骤4:在module.json5中声明权限
    ↓
步骤5:如果是user_grant权限,向用户申请授权
    ↓
步骤6:应用上架审核

步骤1:确认权限是否受限开放

查阅受限开放权限列表,确认:

  • 该权限是否属于受限开放

  • 自己的应用是否符合使用场景

  • 是否有替代方案

步骤2:在AGC申请Profile文件

在应用市场(AGC)侧申请Profile文件,并同步申请使用相应受控权限。

详细步骤请参阅:申请发布Profile

关键点

  • 在"添加Profile页面"时,必须申请使用相应权限

  • 请确保提供的场景和功能信息准确

  • 如果权限超出申请范围,将影响上架

步骤3:下载Profile文件

申请通过后,下载Profile文件,用于后续的应用签名信息配置。

步骤4:在配置文件中声明权限

module.json5配置文件中声明需要申请的权限。

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.READ_MEDIA", // 受限权限示例
        "reason": "$string:read_media_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}

步骤5:向用户申请授权(如果需要)

通过权限列表中的"授权方式"字段,判断是否需要用户授权:

授权方式 是否需要用户授权
system_grant 不需要,安装时自动授予
user_grant 需要,运行时弹窗申请
manual_settings 需要,引导用户去设置

如果是user_grant权限,还需要通过弹窗向用户申请授权

import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';

async function requestPermission(permission: Permissions, context: common.UIAbilityContext) {
    let atManager = abilityAccessCtrl.createAtManager();
    try {
        let result = await atManager.requestPermissionsFromUser(context, [permission]);
        if (result.authResults[0] === 0) {
            console.info('用户授权成功');
        } else {
            console.warn('用户拒绝授权');
        }
    } catch (error) {
        console.error('申请权限失败', error);
    }
}

步骤6:应用上架审核

在应用上架时,应用市场将根据应用的使用场景审核是否可以使用对应的受限权限。

需要准备的材料

  • 为每个受限权限项填写相应的权限说明

  • 上传视频说明使用场景

详情请见:发布HarmonyOS应用

五、调试与发布的区别

调试阶段

在调试阶段,可以通过DevEco Studio自动签名完成申请。

# DevEco Studio中
Build > Generate Key and CSR...

在自动签名的过程中,将由DevEco Studio完成向AGC申请受限权限的步骤,开发者可直接使用。

具体请参考:自动签名-操作步骤

发布阶段

在发布阶段,必须根据申请发布Profile完成受限权限的手动申请。

不能依赖自动签名,必须走正式申请流程。

六、注意事项

审核要求

审核项 要求
使用场景 必须符合权限列表中的可用场景
权限说明 需要为每个权限填写说明
视频证明 需要上传视频说明使用场景
权限范围 不能超出申请的范围

常见驳回原因

原因 说明
场景不符 应用场景不符合权限的可用场景
替代方案 存在Picker/控件等替代方案却未使用
说明不清 权限使用理由不明确
超范围使用 申请的权限超出了实际使用的范围

备注:

如果应用未申请相应的权限证书,却试图在配置文件中声明此类权限,将会导致应用安装失败。

请确保应用申请受限开放权限时提供的场景和功能信息准确。如果应用内使用的受限开放权限超出您申请的范围,或申请权限后使用的功能和场景超出可使用的范围,将影响您的应用上架。

总结

申请流程速查表

步骤 操作 注意事项
1 确认权限是否受限开放 查阅受限开放权限列表
2 确认使用场景 必须符合可用场景
3 准备申请材料 权限说明、视频等
4 AGC申请Profile 同时申请权限
5 下载Profile 用于签名
6 配置文件声明 module.json5
7 向用户申请(如需) user_grant权限
8 应用上架 审核通过

原则

优先使用替代方案,仅特殊场景才申请受限权限

总之一句话:受限权限申请 = 确认场景符合 + AGC申请Profile + 配置文件声明 + 上架审核

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐