{
"name": "ohos.permission.ACCESS_BIOMETRIC"
}, // 查询认证能力是否支持。 try { userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); console.info('current auth trust level is supported'); this.isAvi = true; } catch (error) { const err: BusinessError = error as BusinessError; this.isAvi = false; console.error(`current auth trust level is not supported. Code is ${err?.code}, message is ${err?.message}`); }
UserAuthIcon({ authParam: this.authParam, widgetParam: this.widgetParam, iconHeight: 200, iconColor: this.isAvi ? Color.Blue : Color.Red, onIconClick: () => { console.info('The user clicked the icon.'); }, onAuthResult: (result: userAuth.UserAuthResult) => { console.info(`Get user auth result, result = ${JSON.stringify(result.result)}`); if (result.result === 12500000) { setTimeout(() => { this.isPassUserAuth = true; }, 1000); } } }).alignSelf(ItemAlign.Center);
完整示例参考如下:
import { cryptoFramework } from '@kit.CryptoArchitectureKit'; import { userAuth, UserAuthIcon } from '@kit.UserAuthenticationKit'; import { BusinessError } from '@kit.BasicServicesKit'; @Entry @Component struct UserAuth { rand = cryptoFramework.createRandom(); len: number = 16; randData: Uint8Array = this.rand?.generateRandomSync(this.len)?.data; authParam: userAuth.AuthParam = { challenge: this.randData, authType: [userAuth.UserAuthType.FINGERPRINT], authTrustLevel: userAuth.AuthTrustLevel.ATL3 }; widgetParam: userAuth.WidgetParam = { title: '请进行身份认证' }; @State isPassUserAuth: boolean = false; private isAvi: boolean = false; checkFinger() { // 查询认证能力是否支持。 try { userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); console.info('current auth trust level is supported'); this.isAvi = true; } catch (error) { const err: BusinessError = error as BusinessError; this.isAvi = false; console.error(`current auth trust level is not supported. Code is ${err?.code}, message is ${err?.message}`); } } aboutToAppear(): void { this.checkFinger(); } build() { Row() { Column() { if (!this.isAvi) { Text('请录入指纹或者请确认设备支持指纹登录').fontSize(30).fontColor(Color.Red); } else { if (!this.isPassUserAuth) { UserAuthIcon({ authParam: this.authParam, widgetParam: this.widgetParam, iconHeight: 200, iconColor: this.isAvi ? Color.Blue : Color.Red, onIconClick: () => { console.info('The user clicked the icon.'); }, onAuthResult: (result: userAuth.UserAuthResult) => { console.info(`Get user auth result, result = ${JSON.stringify(result.result)}`); if (result.result === 12500000) { setTimeout(() => { this.isPassUserAuth = true; }, 1000); } } }).alignSelf(ItemAlign.Center); } else { Column() { Image($r('app.media.startIcon')).width(30); Text('主页').fontSize(30); }.width('100%'); } } }.justifyContent(FlexAlign.Center); }.width('100%').height('100%').justifyContent(FlexAlign.Center); } }
Q:HarmonyOS在不用User Authentication Kit的情况下,系统有没有提供自定义认证界面底层的认证逻辑开发相关能力?
A:User Authentication Kit(用户认证服务)提供了系统级多设备统一的、集多种认证方式于一体的系统级用户身份认证控件。HarmonyOS屏蔽不同认证因子的差异,实现调用锁屏口令、人脸、指纹认证的接口归一,并不提供单独的身份认证接口。若伙伴有自定义认证界面的需求,具体认证逻辑需自行实现。
Q:使用ArkUI-X进行跨平台开发,可否使用Authentication相关接口实现登录功能?
A:安全认证Authentication相关的接口实现登录功能,当前是不支持跨平台的,需改用标准登录。