科幻电影一直是人们津津乐道的话题,其中不乏一些经典场面,让观众为之震惊赞叹,例如《钢铁侠》中的悬浮虚拟触摸屏、《碟中谍》中的指纹虹膜识别等。现在,这些看似高大上的科技也走进了咱们的平常生活,像指纹与面容识别,其应用已经极为广泛与普遍。java
当今社会对我的隐私的保护愈来愈重视,对App的安全性也提出了更高的要求,具有私密性与独特性的指纹与面容识别,就成为了强有力的保障。当用户在解锁设备、支付、文件访问时,利用指纹或者面容认证,这在很大程度上减小了账号盗取、信息泄露的风险。android
华为线上快速身份验证服务(FIDO)提供了相关功能:开放基于WebAuthn标准的FIDO2客户端能力,提供本地指纹、面容认证开放能力,为应用提供安全可信的本地生物特征认证和安全便捷的线上快速身份验证能力。其优点在于经过系统完整性检测和密钥校验机制保证结果安全可信,通用的无密码用户身份验证方案,易与现有账号基础设施集成。接下来,为你们说明如何集成指纹和面容认证能力。git
主要的接入步骤以下:github
1. 配置AppGallery Connect
2. 集成HMS Core SDK
3. 集成本地生物认证能力web
步骤一、2能够参考超连接中的指导进行完成,这里不作赘述。
须要注意的是步骤2中提供了两种本地生物认证的SDK:安全
Bioauthn-AndroidXide
implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'
Bioauthn测试
implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'
这两个SDK对外表现的能力略有不一样。主要表如今BioAuthn-AndroidX SDK的指纹认证能力提供统一界面,不须要应用本身绘制指纹认证提示界面;BioAuthn SDK的指纹认证能力不提供统一界面,须要应用本身绘制指纹认证提示界面。ui
能够参考官网FAQ中的说明:this
此次咱们主要介绍Bioauthn-AndroidX的集成,Demo能够在这里下载
集成本地生物认证能力
注意:1. 请保证手机没有root过,否则没法使用指纹和面容能力2. 测试前请先保证手机中已经有相应的指纹和面容信息,不然会报相关的错误码。能够在设置-生物识别和密码-指纹/人脸识别中添加相关指纹和面容
指纹认证
使用指纹认证分为两步:
1. 初始化BioAuthnPrompt对象,代码以下:
BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { showResult("指纹认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString); } @Override public void onAuthSucceeded(BioAuthnResult result) { showResult("指纹认证成功. CryptoObject=" + result.getCryptoObject()); } @Override public void onAuthFailed() { showResult("指纹认证失败."); } });
2. 建立提示信息,并进行认证。
// 自定义设置信息 BioAuthnPrompt.PromptInfo.Builder builder = new BioAuthnPrompt.PromptInfo.Builder().setTitle("主标题") .setSubtitle("副标题") .setDescription("内容描述"); //容许使用其余认证方式 builder.setDeviceCredentialAllowed(true); BioAuthnPrompt.PromptInfo info = builder.build(); //进行认证 bioAuthnPrompt.auth(info);
配置完成后就能够进行指纹认证了,认证页面以下:
面容认证
面容认证的限制条件比较多,具体请参考FAQ:
1. 检查是否有相机权限(EMUI10.1及之后版本不须要相机权限)
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { showResult("请先申请相机权限"); ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, 1); return; }
2. 检查当前设备是否支持人脸识别
FaceManager faceManager = new FaceManager(this); int errorCode = faceManager.canAuth(); if (errorCode != 0) { resultTextView.setText(""); showResult("不支持人脸识别. errorCode=" + errorCode); return; }
3. 进行人脸认证
int flags = 0; Handler handler = null; CryptoObject crypto = null; faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { showResult("认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString + (errMsgId == 1012 ? " 没有相机权限." : "")); } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { showResult("返回识别过程当中提示信息. helpMsgId=" + helpMsgId + ",helpString=" + helpString + "\n"); } @Override public void onAuthSucceeded(BioAuthnResult result) { showResult("认证成功. CryptoObject=" + result.getCryptoObject()); } @Override public void onAuthFailed() { showResult("认证失败."); } }, handler);
这样人脸识别的代码就完成了,调用后就会进行人脸认证。须要注意的是人脸认证没有默认的UI页面,须要咱们本身去设计配置。
使用场景
指纹认证
通常来讲指纹认证是用在支付场景的,用户付款前可使用指纹认证来进行安全检测。指纹认证也能够用在文件保护App里,只有指纹认证经过才能够查看相关文件。
面容识别
面容识别也能够在支付场景和文件保护APP中使用,这个再也不赘述在文件保护APP方面,面容识别的效果会比指纹表现的更出色。由于文件保护App有一个通病,那就是“欲盖弥彰”,摆明了告诉别人你这个文件很重要或很敏感。因此其余人只要搞定了你的指纹(虽然也比较困难),那就畅通无阻了。
那么文件保护App除了能够在明面上展现指纹识别外,还能够“悄悄地”再作一层面容识别(面容识别不须要设计UI界面),只有指纹识别和面容识别都过了,才展现正确的文件,不然能够展现假文件。这样作的话就能够更好的保护用户的隐私。
具体的人脸识别的代码实现能够是下面这样的:
faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { if(isFingerprintSuccess){//指纹认证成功但面容识别失败 //展现假文件 showFakeFile(); } } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { } @Override public void onAuthSucceeded(BioAuthnResult result) { if(isFingerprintSuccess){//指纹认证成功 //展现真文件 showRealFile(); }else {//指纹认证失败 //展现假文件 showFakeFile(); } } @Override public void onAuthFailed() { if(isFingerprintSuccess){//指纹认证成功但面容识别失败 //展现假文件 showFakeFile(); } } }, handler);
>>访问华为线上快速身份验证服务官网,了解更多相关内容
>>获取华为线上快速身份验证服务开发指导文档
>>华为HMS Core官方论坛
>>华为线上快速身份验证服务开源仓库地址:GitHub、Gitee
点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~