鸿蒙开发-生物认证

此文章内容兼容API12,使用harmony next应用开发

1,module.json5文件中,声明权限

    "requestPermissions": [
     
      {
        "name": "ohos.permission.ACCESS_BIOMETRIC",
        // 生物认证
        "reason": "BIOMETRIC_REQUEST_REASON",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      },
    ],

2,检查设备是否支持生物认证

//是否支持指纹登陆
try {
      userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL2);
      return 0
    } catch (error) {
      const err: BusinessError = error as BusinessError;
      return err.code
    }
//是否支持面纹登录(2D)
try {
      userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL2);
      return 0
    } catch (error) {
      const err: BusinessError = error as BusinessError;
      return err.code
    }

检查结果判断:

userAuth.UserAuthResultCode.TYPE_NOT_SUPPORT //不支持
userAuth.UserAuthResultCode.NOT_ENROLLED//支持但未设置过,引导设置
0 //支持且设置过

3,引导跳转到设备系统的生物识别设置页面

private gotoSystemBioAuthSetPage(){
    let context = getContext(this) as common.UIAbilityContext;
    let want: Want = {
      bundleName: 'com.huawei.hmos.settings',
      abilityName: 'com.huawei.hmos.settings.MainAbility',
      uri: 'biometrics_and_password_settings',
      parameters: {
        pushParams: 'com.example.natificationdemo'
      }
    };
    context.startAbility(want)
  }

4,生物认证开通

//随机挑战值生成
const rand = cryptoFramework.createRandom();
const len: number = 16;
let challenge = rand?.generateRandomSync(len)?.data;
//认证参数
const authParam: userAuth.AuthParam = {
          challenge: challenge,
          authType: [userAuthType],
          authTrustLevel: userAuth.AuthTrustLevel.ATL2,
 };
//认证提示
const widgetParam: userAuth.WidgetParam = {
          title: '请轻触指纹传感器',
};
//开始认证
let userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);
// 需要调用UserAuthInstance的start()接口,启动认证后,才能通过onResult获取到认证结果。
userAuthInstance.on('result', {
      onResult(result) {
      if (result.result == userAuth.UserAuthResultCode.SUCCESS) { 
          //生物认证成功
          resolve(result.token)
      } else {
           resolve(null)
      }
   }
});
userAuthInstance.start()

5,开通权限后,敏感信息的存储设计,推荐使用 @ohos.security.asset (关键资产存储服务)-ArkTS API-Asset Store Kit(关键资产存储服务

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容