此文章内容兼容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(关键资产存储服务