import 'dart:convert'; import 'package:aliyun_face_plugin/aliyun_face_plugin.dart'; import 'package:flutter/services.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/aliyunRealNameAuth/realNameVertify_entity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; class AliyunRealNameAuthProvider { final aliyunFacePlugin = AliyunFacePlugin(); //实名认证初始化 var infos = ''; //打印信息 var metainfosMap = {}; //认证信息 var certifyId = ''; //认证ID var getLockInfo = LockListInfoItemEntity(); //锁信息 final Function(bool) onCertifyResult; //认证结果 AliyunRealNameAuthProvider( {required this.getLockInfo, required this.onCertifyResult}); //初始化 initAliyunRealNameAuth() { aliyunFacePlugin.init(); getMetaInfos(); } // 获取客户端metainfos,将信息发送到服务器端,调用服务器端相关接口获取认证ID,即CertifyId。 Future getMetaInfos() async { String metainfos; try { metainfos = await aliyunFacePlugin.getMetaInfos() ?? 'Unknown metainfos'; metainfosMap = jsonDecode(metainfos); } on PlatformException { metainfos = 'Failed to get metainfos.'; } infos = "metainfos: $metainfos"; AppLog.log(infos); getFaceCertifyId(); } // 获取人脸认证certifyId void getFaceCertifyId() async { LockCertifyEntity entity = await ApiRepository.to.getFaceCertifyId( lockId: getLockInfo.lockId ?? 0, keyId: getLockInfo.keyId ?? 0, metaInfo: metainfosMap); if (entity.errorCode!.codeIsSuccessful) { certifyId = entity.data!.certifyId!; startVerify(); } } // 调用认证接口,CertifyId需要调用服务器端接口获取。 Future startVerify() async { String verifyResult; try { // 每个CertifyId只能使用一次,否则会返回code: "2002(iOS), 1001(Android)"。 verifyResult = await aliyunFacePlugin.verify("certifyId", certifyId) ?? '-1,error'; } on PlatformException { verifyResult = '-2,exception'; } infos = "verifyResult: $verifyResult"; AppLog.log(infos); getServiceCheckCertify(); } // 检测certifyId是否完成认证 Future getServiceCheckCertify() async { var entity = await ApiRepository.to.getServiceCheckCertify( certifyId: certifyId, keyId: getLockInfo.keyId ?? 0, ); if (entity.errorCode!.codeIsSuccessful) { // 如果认证成功,则调用回调函数,将结果传递给调用处 onCertifyResult(true); } else { // 如果认证失败 // await startVerify(); } } }