【代码案例】HarmonyOS 人脸指纹解锁案例
HarmonyOS Next应用开发案例(持续更新中……)
本案例完整代码,请访问:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/faceandfingerprintunlocking
本案例已上架HarmonyOS NEXT开源组件市场,如需获取或移植该案例,可安装此插件。开发者可使用插件获取鸿蒙组件,添加到业务代码中直接编译运行。
介绍
本示例介绍了使用@ohos.userIAM.userAuth用户认证服务实现人脸或指纹识别的功能。 该场景多用于需要人脸或指纹识别的安全场景。
效果图预览
使用说明:
- 点击指纹登录,弹出指纹登录场景框。
- 点击面容登录,弹出面容登录场景框。
实现步骤
实现H5页面调用自定义输入法,有两个关键点,一是需要将arkTS方法注册到h5页面中;二是要实现弹出键盘的组件。
- 发起人脸和指纹识别的方法首先需要先申请权限ohos.permission.ACCESS_BIOMETRIC。同时指定认证类型(UserAuthType)和认证等级(AuthTrustLevel),调用getAvailableStatus接口查询当前的设备是否支持相应的认证能力。
userAuth.getAvailableStatus(type === CommonConstants.FINGER ? userAuth.UserAuthType.FINGERPRINT : userAuth.UserAuthType.FACE,
userAuth.AuthTrustLevel.ATL1);
- 指定用户认证相关参数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);
- 调用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');
}
});
- 调用UserAuthInstance.start接口发起认证,通过IAuthCallback回调返回认证结果UserAuthResult。
userAuthInstance.start();
高性能知识点
不涉及
工程结构&模块类型
faceandfingerprintunlocking // har
|---common
| |---CommonContants.ets.ets // 常量文件
|---view
| |---MainPage.ets // 案例页面
模块依赖
不涉及
参考资料
1
浏览387 编辑于2025-01-18 01:07浙江
全部评论
最多点赞
最新发布
最早发布
写回答
- 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
- 如您发布的内容为转载内容,请注明内容来源。
发表
我要发帖子
了解社区公约,与您携手共创和谐专业的开发者社区。