Тихая ревалидация
Использует движок Тихая ревалидация, который анализирует поведенческий контекст пользователя в рамках сетевого эффекта Unico и выдаёт сигнал уверенности для текущей транзакции. Другими словами, мы предоставляем уровень уверенности в том, что это именно тот пользователь, который ожидается в транзакции.
Минимальная версия: 4.62.0
| Атрибут | Тип | Обязательно | Описание |
|---|---|---|---|
externalUserId | String | ✅ | Идентификатор пользователя в вашей системе. Автоматически хешируется с помощью SHA-256 перед передачей, никогда не отправляется в открытом виде. |
Шаг 1 — Реализуйте initializeSDK в нативном коде
initializeSDK не предоставляется в Dart. Он должен выполняться до запуска движка Flutter, поэтому вы вызываете его в нативном коде вашего приложения — Application.onCreate на Android и application(_:didFinishLaunchingWithOptions:) на iOS.
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 не указан, по умолчанию используется production.
Шаг 2 — Реализуйте startSilentValidation
После initializeSDK свяжите уже выполняющийся сбор данных с идентифицированным пользователем, вызвав startSilentValidation с UnicoCheckPrepareInfo, содержащим externalUserId.
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 и всегда равен null на Android.
Шаг 3 — Создайте процесс и выполните аутентификацию
Пока валидация выполняется, создайте процесс верификации для завершения аутентификации. См. Справочник API ▸ API ▸ Создание процесса.
Включите в тело запроса тот же externalUserId, который был отправлен в UnicoCheckPrepareInfo на Шаге 2 — именно это позволяет бэкенду сопоставить создание процесса с уже выполняющейся валидацией.
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 | Недостаточно данных для одобрения в тихом режиме. Рекомендуется аутентификация с помощью биометрии (селфи) или другого альтернативного метода. |