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摄狱,引導跳轉到設備系統(tǒng)的生物識別設置頁面
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脓诡,生物認證開通
//隨機挑戰(zhàn)值生成
const rand = cryptoFramework.createRandom();
const len: number = 16;
let challenge = rand?.generateRandomSync(len)?.data;
//認證參數(shù)
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(關鍵資產存儲服務