HarmonyOS鸿蒙Next中您的应用在用户拒绝相机/麦克风权限后,存在重新运行时弹窗申请权限问题,不符合相关法律法规要求

HarmonyOS鸿蒙Next中您的应用在用户拒绝相机/麦克风权限后,存在重新运行时弹窗申请权限问题,不符合相关法律法规要求 上架审核报错:

您的应用在用户拒绝【相机/麦克风】权限后,存在重新运行时弹窗申请权限问题,不符合相关法律法规要求。

这个应该如何更改呢?

4 回复

开发者您好,应用首启时若权限被用户明确拒绝,那么二次进行权限申请时,不应使用弹窗,并且应避免在应用重启时立即进行弹窗申请。

规则参考:https://developer.huawei.com/consumer/cn/doc/app/faq-05

二次申请权限请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/request-user-authorization-second

更多关于HarmonyOS鸿蒙Next中您的应用在用户拒绝相机/麦克风权限后,存在重新运行时弹窗申请权限问题,不符合相关法律法规要求的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学习了

在HarmonyOS Next中,应用需遵循权限申请规范:用户拒绝相机/麦克风权限后,应用应在运行时检查权限状态,若已被拒绝则不应再次弹窗请求。正确的做法是引导用户前往系统设置手动开启权限,避免违规频繁弹窗。请修改权限请求逻辑,确保仅当权限状态为“未请求”时才能弹窗。

用户拒绝相机/麦克风权限后,再次运行时直接弹出系统权限申请框,属于重复打扰用户,违反《个人信息保护法》及华为应用市场审核规则。修改核心原则:禁止无场景说明的重复弹窗,仅能在用户主动触发相关功能时请求,如被永久拒绝则须引导至设置页

合规处理流程(以相机权限为例)

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

// 1. 检查权限状态
async function checkAndRequestPermission(context: common.UIAbilityContext): Promise<void> {
  const atManager = abilityAccessCtrl.createAtManager();
  const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
  const permission: Permissions = 'ohos.permission.CAMERA';

  const grantStatus = atManager.checkAccessTokenSync(bundleInfo.appInfo.accessTokenId, permission);
  
  if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
    // 已授权,执行业务
  } else if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
    // 2. 判断是否首次拒绝(可再次弹窗)还是永久拒绝
    const canRequest = atManager.isPermissionRequestDenied(context, permission); // API 11+
    if (canRequest) {
      // 用户仅拒绝未勾选“不再提醒”,可在用户主动点击时再次请求
      atManager.requestPermissionsFromUser(context, [permission]).then((result) => {
        if (result.authResults[0] === 0) {
          // 授权成功
        } else {
          // 拒绝,可提示功能受限但不强弹
        }
      });
    } else {
      // 3. 永久拒绝:弹出自定义对话框,引导用户去设置
      showSettingsDialog(context);
    }
  }
}

// 自定义对话框引导设置
function showSettingsDialog(context: common.UIAbilityContext): void {
  AlertDialog.show({
    title: '需要相机权限',
    message: '该功能需要相机权限,请在设置中开启',
    autoCancel: true,
    buttons: [
      { text: '取消', color: '#999' },
      {
        text: '去设置',
        color: '#007DFF',
        action: () => {
          context.startAbility({
            bundleName: 'com.huawei.hmos.settings',
            abilityName: 'com.huawei.hmos.settings.MainAbility',
            uri: 'application_info_entry',
            parameters: {
              /** 可跳过应用列表直接进入本应用详情页 */
              pushParams: context.abilityInfo.bundleName
            }
          });
        }
      }
    ]
  });
}

关键点说明

  • 使用 isPermissionRequestDenied 判断用户是否勾选“禁止后不再询问”,若已永久拒绝则调用自定义对话框。
  • 权限请求必须绑定在用户主动操作(如点击“拍照”按钮)上,禁止应用启动或页面切换时自动弹出。
  • 若用户仅临时拒绝,可允许再次请求,但须有功能前置说明(如按钮旁提示“需要开启相机”)。
  • 弹窗引导至设置页时,需提供取消选项,不可强制跳转。

按以上逻辑修改即可通过审核。

回到顶部