静默重新验证
使用静默重新验证引擎,在 Unico 网络效应范围内分析用户的行为背景,并为当前交易提供置信度信号。换句话说,我们提供的是判断当前用户是否为该交易预期用户的置信水平。
最低版本:4.62.0
| 属性 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
externalUserId | String | ✅ | 您系统中的用户标识符。传输前会自动使用 SHA-256 进行哈希处理,绝不会以明文形式发送。 |
步骤 1 — 在原生代码中实现 initializeSDK
initializeSDK 未在 Dart 中暴露。它必须在 Flutter 引擎启动之前运行,因此您需要在应用的原生代码中调用它——Android 上为 Application.onCreate,iOS 上为 application(_:didFinishLaunchingWithOptions:)。
UnicoSDK.initializeSDK 必须在应用启动时尽早调用。延迟调用会缩短后台处理时间,并增加认证结果不确定的可能性。
- Android
- iOS
import android.app.Application
import com.acesso.acessobio_android.onboarding.UnicoSDK
import com.acesso.acessobio_android.onboarding.models.Environment
import com.acesso.acessobio_android.onboarding.models.UnicoSDKConfig
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
UnicoSDK.initializeSDK(
this,
UnicoSDKConfig(
sdkKey = "your_sdk_key",
bundleId = "your_bundle_id",
environment = Environment.UAT
)
)
}
}
在 android/app/src/main/AndroidManifest.xml 中注册该类:
<application android:name=".MainApplication">
该插件会将原生采集 SDK 暴露给您的应用,因此 UnicoSDK 已存在于您的编译 classpath 中——无需在 android/app/build.gradle 中添加额外依赖。
import AcessoBio
import Flutter
import UIKit
@main
class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UnicoSDK.initializeSDK(config: YourUnicoConfig(), environment: .UAT)
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
config 是一个 AcessoBioConfigDataSource——sdkKey 来自 getHostKey(),bundle 来自 getBundleIdentifier():
final class YourUnicoConfig: NSObject, AcessoBioConfigDataSource {
func getBundleIdentifier() -> String { "your_bundle_id" }
func getHostKey() -> String { "your_sdk_key" }
}
如果省略 environment,默认值为生产环境。
步骤 2 — 实现 startSilentValidation
在 initializeSDK 之后,通过调用 startSilentValidation 并传入包含 externalUserId 的 UnicoCheckPrepareInfo,将已在进行中的采集与已识别的用户关联起来。
import 'package:unico_check/unico_check.dart';
try {
await UnicoSilentAuthDefault().startSilentValidation(
UnicoCheckPrepareInfo(externalUserId: 'external_user_id'),
);
} on UnicoError catch (error) {
// error.code, error.description, error.info
}
返回的 Future 会在验证成功启动时完成,失败时抛出 UnicoError。
如 果验证发生在流程开始时(例如登录时),请等待 Future 完成后再继续执行步骤 3。
| 代码 | 含义 |
|---|---|
75001 | SDK 未初始化。initializeSDK 尚未被调用、尚未完成,或调用失败。 |
75000 | 通用采集失败。 |
UnicoError.info 携带流程中失败的步骤。该字段仅在 iOS 上提供,在 Android 上始终为 null。
步骤 3 — 创建流程并进行认证
在验证进行的同时,创建验证流程以完成认证。请参阅 API 参考 ▸ API ▸ 创建流程。
在请求正文中包含与步骤 2 中 UnicoCheckPrepareInfo 所发送的相同 externalUserId——这样后端才能将流程创建与已在进行中的验证关联起来。
curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": {
"duiType": 1,
"code": "12345678909",
"name": "Luke Skywalker",
"gender": "M",
"birthDate": "2000-05-20",
"email": "[email protected]",
"phone": "5519725570707"
},
"useCase": "Onboarding",
"externalUserId": "external_user_id"
}'
响应中包含 silentAuth.result 字段,表示认证结果:
{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"silentAuth": {
"result": "yes"
}
}
| 字段 | 类型 | 描述 |
|---|---|---|
silentAuth.result | string | yes 或 no——可能的取值请参见下文。 |
silentAuth.result — 可能的取值
| 取值 | 含义 |
|---|---|
yes | 认证通过,用户已以足够的置信度被识别,无需额外采集。 |
no | 数据不足,无法静默通过认证。建议通过生物识别(自拍)或其他替代方式进行认证。 |