活体检测(生物特征自拍)
内嵌活体验证的生物特征自拍采集。SDK 通过 SmartFrames 引导用户,直到获取生物特征有效帧,并以 Base64 + JWT 形式返回图像。
能力
此采集类型使用 Liveness 能力。关于 Liveness 工作原理的概念性概述,请参阅 Liveness 能力页面。
工作原理
插件委托给底层原生 SDK:
- 插件使用 SmartFrame 遮罩打开相机(Android 或 iOS)。
- 原生 SDK 引导用户将面部置于取景框内。
- 验证活体 — 仅当用户实际在场时会话才会完成。
- 通过平台通道返回包含
base64和encrypted(JWT)的ResultCamera对象。
相机模式(智能拍摄)
SDK 默认启用智能取景和自动拍摄。在构建器中按如下方式 配置相机模式:
UnicoCheckCameraOpener _opener = _unicoCheck
.setAutoCapture(autoCapture: true)
.setSmartFrame(smartFrame: true)
.build();
开始活体采集
步骤 1 — 实现 UnicoListener
UnicoListener 处理 SDK 生命周期回调。实现以下四个必须方法:
| 方法 | 调用时机 |
|---|---|
onErrorUnico(error) | SDK 运行过程中发生错误 |
onUserClosedCameraManually() | 用户手动关闭相机 |
onSystemClosedCameraTimeoutSession() | 达到 40 秒会话限制 |
onSystemChangedTypeCameraTimeoutFaceInference() | 13 秒内未检测到人脸 — 切换为手动拍摄 |
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {
late UnicoCheckBuilder _unicoCheck;
@override
void onErrorUnico(UnicoError error) {}
@override
void onUserClosedCameraManually() {}
@override
void onSystemClosedCameraTimeoutSession() {}
@override
void onSystemChangedTypeCameraTimeoutFaceInference() {}
}
必须实现的监听器方法
上述四个监听器方法必须在您的项目中创建(即使没有任何逻辑)。否则,项目将无法成功编译。
步骤 2 — 在 UnicoSelfie 上实现自拍监听器
在您的状态类中添加自拍回调:
| 方法 | 描述 |
|---|---|
onSuccessSelfie(ResultCamera result) | 拍摄成功 — 返回含 base64(预览)和 encrypted(API 用 JWT)的 ResultCamera |
onErrorSelfie(UnicoError error) | 拍摄失败 — 返回包含代码和描述的 UnicoError |
Token 过期
生成 encrypted 与将其提交到 API 之间的间隔不得超过 10 分钟。
@override
void onSuccessSelfie(ResultCamera result) { }
@override
void onErrorSelfie(UnicoError error) { }
步骤 3 — 调用 openCameraSelfie
openCameraSelfie 方法用于打开相机。它接受 UnicoSelfie 监听器的实现:
_opener.openCameraSelfie(listener: this);
监控数据收集
openCameraSelfie 方法提供一个重载,接受通过 UnicoCheckPrepareInfo 传入的元数据,以协助识别用户会话和流程:
externalUserId(String,必填)— 您系统中的用户标识符。传输前自动使用 SHA-256 进行哈希处理。useCase(String,可选)— 当前运行的上下文或流程的标识符。以明文形式传输。
_opener.openCameraSelfie(
listener: this,
prepareInfo: UnicoCheckPrepareInfo(
externalUserId: 'external_user_id',
useCase: 'use_case', // optional
),
);
完整的结果处理说明,请参阅接收结果。