87 lines
2.8 KiB
Dart
87 lines
2.8 KiB
Dart
|
|
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<void> 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<void> 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<void> getServiceCheckCertify() async {
|
|||
|
|
var entity = await ApiRepository.to.getServiceCheckCertify(
|
|||
|
|
certifyId: certifyId,
|
|||
|
|
keyId: getLockInfo.keyId ?? 0,
|
|||
|
|
);
|
|||
|
|
if (entity.errorCode!.codeIsSuccessful) {
|
|||
|
|
// 如果认证成功,则调用回调函数,将结果传递给调用处
|
|||
|
|
onCertifyResult(true);
|
|||
|
|
} else {
|
|||
|
|
// 如果认证失败
|
|||
|
|
// await startVerify();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|