用户认证同步效果,用户认证是异步方法,对于使用的时候很不友好,可以通过这种方法,去实现同步效果

用户认证是异步方法,对于使用的时候很不友好,可以通过这种方法,去实现同步效果

HarmonyOS
2024-05-28 21:31:44
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
sheeny2000

使用的核心API

用户认证开发指导

核心代码解释

达到同步的效果,在执行完成用户认证之后才会执行后续的代码逻辑:

import userIAM_userAuth from '@ohos.userIAM.userAuth'; 
import util from '@ohos.util'; 
import router from '@ohos.router'; 
import { asset } from '@kit.AssetStoreKit'; 
import { stringToUint8Array } from '../entryability/ts/BaseUtil'; 
 
let authType = userIAM_userAuth.UserAuthType.FINGERPRINT; 
let authTrustLevel = userIAM_userAuth.AuthTrustLevel.ATL1; 
const authParam: userIAM_userAuth.AuthParam = { 
  challenge: new Uint8Array([49, 49, 49, 49, 49, 49]), 
  authType: [userIAM_userAuth.UserAuthType.FINGERPRINT], 
  authTrustLevel: userIAM_userAuth.AuthTrustLevel.ATL1, 
}; 
const widgetParam: userIAM_userAuth.WidgetParam = { 
  title: '请输入密钥', 
}; 
// 获取认证对象 
let auth: object; 
 
// 查询认证能力是否支持 
async function getStatus() { 
  try { 
    userIAM_userAuth.getAvailableStatus(authType, authTrustLevel); 
    console.info("current auth trust level is supported"); 
    getUserAuthentication(); 
  } catch (error) { 
    console.info("current auth trust level is not supported, error = " + error); 
  } 
} 
 
//同步 
async function getUserAuthentication() { 
  let checkRet: number = await new Promise( 
    (resolve, reject) => { 
      const authParam: userIAM_userAuth.AuthParam = { 
        challenge: new Uint8Array([49, 49, 49, 49, 49, 49]), 
        authType: [userIAM_userAuth.UserAuthType.FINGERPRINT], 
        authTrustLevel: userIAM_userAuth.AuthTrustLevel.ATL1, 
      }; 
      const widgetParam: userIAM_userAuth.WidgetParam = { 
        title: '请输入密钥', 
      }; 
      try { 
        //获取认证对象 
        let userAuthInstance = userIAM_userAuth.getUserAuthInstance(authParam, widgetParam); 
        //订阅认证结果 
        userAuthInstance.on('result', { 
          onResult(result) { 
            resolve(0); 
          } 
        }); 
        userAuthInstance.start(); 
      } catch (error) { 
        resolve(1); 
      } 
    }); 
  //认证结束之后执行后面的步骤 
  AlertDialog.show({ message: "认证结束。。。。。" }) 
  AlertDialog.show({ message: "后续步骤开始执行。。。。。" }) 
} 
 
@Entry 
@Component 
struct Authentication { 
  @State message: string = 'Hello World'; 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(async () => { 
            getStatus(); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

实现效果

说明:隐私安全限制,不可以录制视频。

描述:发起指纹认证,然后拉起认证页面,认证完成后才会执行后续代码,这里是弹出弹窗

分享
微博
QQ
微信
回复
2024-05-29 22:43:34
相关问题
HUKS用户认证通过PIN生成密钥
392浏览 • 1回复 待解决
用户认证功能有哪些?
324浏览 • 1回复 待解决
ArkTs中异步方法如何转变成同步方法
537浏览 • 0回复 待解决
数据库操作同步方法
538浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
576浏览 • 1回复 待解决
arkts 什么时候可以实现模糊效果
1653浏览 • 1回复 待解决
C++同步调ArkTS里面的方法
350浏览 • 1回复 待解决
ubuntu系统用ROOT用户登陆方法
788浏览 • 1回复 待解决