|

示例代码

HarmonyOS NEXT

【代码案例】HarmonyOS 人脸指纹解锁案例

HarmonyOS Next应用开发案例(持续更新中……)

本案例完整代码,请访问:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/faceandfingerprintunlocking

本案例已上架HarmonyOS NEXT开源组件市场如需获取或移植该案例,可安装此插件。开发者可使用插件获取鸿蒙组件,添加到业务代码中直接编译运行。

介绍

本示例介绍了使用@ohos.userIAM.userAuth用户认证服务实现人脸或指纹识别的功能。 该场景多用于需要人脸或指纹识别的安全场景。

效果图预览

使用说明

  • 点击指纹登录,弹出指纹登录场景框。
  • 点击面容登录,弹出面容登录场景框。

实现步骤

实现H5页面调用自定义输入法,有两个关键点,一是需要将arkTS方法注册到h5页面中;二是要实现弹出键盘的组件。

  1. 发起人脸和指纹识别的方法首先需要先申请权限ohos.permission.ACCESS_BIOMETRIC。同时指定认证类型(UserAuthType)和认证等级(AuthTrustLevel),调用getAvailableStatus接口查询当前的设备是否支持相应的认证能力。
深色代码主题
复制
  userAuth.getAvailableStatus(type === CommonConstants.FINGER ? userAuth.UserAuthType.FINGERPRINT : userAuth.UserAuthType.FACE,
        userAuth.AuthTrustLevel.ATL1);
  1. 指定用户认证相关参数AuthParam(包括挑战值、认证类型UserAuthType列表和认证等级AuthTrustLevel)、配置认证控件界面WidgetParam,调用getUserAuthInstance获取认证对象。
深色代码主题
复制
  // 设置认证参数
  let reuseUnlockResult: userAuth.ReuseUnlockResult = {
    reuseMode: userAuth.ReuseMode.AUTH_TYPE_RELEVANT,
    reuseDuration: userAuth.MAX_ALLOWABLE_REUSE_DURATION,
  }
  const rand = cryptoFramework.createRandom();
  const len: number = CommonConstants.LEN;
  const randData: Uint8Array = rand?.generateRandomSync(len)?.data;
  const _this = this;
  this.authParam = {
    challenge: randData,
    authType: [type === CommonConstants.FINGER ? userAuth.UserAuthType.FINGERPRINT : userAuth.UserAuthType.FACE],
    authTrustLevel: userAuth.AuthTrustLevel.ATL1,
    reuseUnlockResult: reuseUnlockResult,
  };
  // 获取认证对象
  const userAuthInstance = userAuth.getUserAuthInstance(this.authParam, this.widgetParam);
  1. 调用UserAuthInstance.on接口订阅认证结果。
深色代码主题
复制
  // 订阅认证结果
  userAuthInstance.on('result', {
    onResult(result) {
      console.info(`userAuthInstance callback result: ${JSON.stringify(result)}`);
      if (result.result !== userAuth.UserAuthResultCode.SUCCESS) {
        if (type === CommonConstants.FINGER) {
          _this.fingerSwitch = !_this.fingerSwitch;
        } else {
          _this.faceSwitch = !_this.faceSwitch;
        }
      }
      // 可在认证结束或其他业务需要场景,取消订阅认证结果
      userAuthInstance.off('result');
    }
  });
  1. 调用UserAuthInstance.start接口发起认证,通过IAuthCallback回调返回认证结果UserAuthResult。
深色代码主题
复制
  userAuthInstance.start();

高性能知识点

不涉及

工程结构&模块类型

深色代码主题
复制
faceandfingerprintunlocking                // har
|---common
|   |---CommonContants.ets.ets             // 常量文件
|---view
|   |---MainPage.ets                       // 案例页面

模块依赖

不涉及

参考资料

@ohos.userIAM.userAuth

用户身份认证开发指导

点赞
1
收藏
回复
分享
举报
浏览387 编辑于2025-01-18 01:07浙江
全部评论
最多点赞
最新发布
最早发布
写回答
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。
发表

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。