HarmonyOS 鸿蒙Next 关于web申请权限问题

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于web申请权限问题

 1.每次都要申请吗? 这边测试了一下,demo中确实每次使用都会去重新申请,可在第一次申请后存储一个变量flag,再次触发event时判断flag的值。  意思是业务侧进行记录是吗?  

2.官方给的示例,需要应用侧首次授权(一次即可),在modulu.json文件里声明权限,因为在应用侧授权了后,再对网页访问的给定权限进行授权。网页权限授权的前提是应用侧要先有此权限。不然的话用不了。  意思是先应用侧申请,在web端申请吗?

2 回复
1、官方给的demo中,下面这段是应用侧授权,即系统拉起弹框请求用户授权,只会询问一次,如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-abilityaccessctrl-V5#requestpermissionsfromuser9
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
  let context: Context = getContext(this) as common.UIAbilityContext;
  atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
    console.info('data:' + JSON.stringify(data));
    console.info('data permissions:' + data.permissions);
    console.info('data authResults:' + data.authResults);
  })
} catch (error) {
  console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
}

2、底部的申请弹窗是自定义弹窗,官网demo中下面这段代码:

AlertDialog.show({
  title: 'title',
  message: 'text',
  primaryButton: {
    value: 'deny',
    action: () => {
      event.request.deny();
    }
  },
  secondaryButton: {
    value: 'onConfirm',
    action: () => {
      event.request.grant(event.request.getAccessibleResource());
    }
  },
  cancel: () => {
    event.request.deny();
  }
})

3、如果不需要,可以直接去掉第2点这段代码,在onPermissionRequest属性的方法中直接写event.request.grant(event.request.getAccessibleResource());这行代码;也可以判断是否有权限,有权限时写event.request.grant(event.request.getAccessibleResource());这行代码,没权限时可提示用户在系统应用“设置”的界面中,手动授予权限。<br>

参考demo:

if (event) {
  let bundleInfo =
    await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION);
  let cameraIndex = bundleInfo.reqPermissionDetails.findIndex((item) =>
  item.name === "ohos.permission.CAMERA");
  let cameraStatus = bundleInfo.permissionGrantStates[cameraIndex]
  if (cameraStatus === -1) {
    //提示授权
    prompt.showToast({
      message: '在系统应用“设置”的界面中,手动授予权限',
      duration: 2000
    });
  } else {
    event.request.grant(event.request.getAccessibleResource());
  }
}

关于HarmonyOS 鸿蒙Next的web申请权限问题,以下是一些可能的原因和解决方案:

  1. 权限分类与申请方式

    • 鸿蒙Next系统对权限进行了细致分类,包括系统授权和用户授权。系统授权通常自动完成,适用于非敏感信息权限。用户授权则需要用户明确许可,适用于敏感信息权限。
    • 请确保根据权限类型选择合适的申请方式,并在应用的配置文件中正确声明所需权限。
  2. 权限申请未通过审核

    • 华为会对权限申请进行审核,如果认为存在风险或不符合要求,可能会驳回申请。
    • 请检查申请中关于权限使用场景的描述是否清晰准确,是否符合华为的政策要求。
  3. 设备兼容性与申请条件

    • 请确认设备是否支持鸿蒙Next系统升级,以及是否满足权限申请的硬件和软件要求。
    • 确保已满足所有申请条件,如设备状态、系统版本、账户权限等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。他们将能够提供更具体的帮助和指导。

回到顶部