Перейти к основному содержимому

Пользовательские сценарии

Пользовательские сценарии (User Journeys) — это многоэтапные сессии захвата, организуемые SDK совместно с настроенным потоком. Например, поток idchecktrustdocssign выполняет селфи + документ + подпись в рамках одной сессии.

Варианты использования

Доступные сценарии зависят от потока, настроенного для вашей интеграции. Полное соответствие «вариант использования → поток → возможность» см. в разделе Варианты использования.

Принцип работы

Плагин делегирует управление базовым нативным SDK:

  1. Плагин открывает камеру (Android или iOS) с оверлеем SmartFrame.
  2. Нативный SDK оркестрирует последовательность захватов, необходимых для потока (селфи, документ, подпись).
  3. SDK самостоятельно передаёт результаты в Unico — клиент никогда не получает данные изображений напрямую и не управляет ими.
  4. Возвращает объект SuccessResult с processId через канал платформы.

Оркестрация полностью выполняется SDK — вам не нужно реализовывать последовательность шагов в коде Dart.

Режим камеры (умный захват)

В SDK по умолчанию включены интеллектуальное кадрирование и автоматический захват. Настройте режим камеры в builder следующим образом:

UnicoCheckCameraOpener _opener = new UnicoCheck(this)
.setAutoCapture(autoCapture: true)
.setSmartFrame(smartFrame: true)
.build();
совет

Значения false/true для указанных методов не изменяют процесс захвата; они используются только для внутренней логики SDK.

Запуск пользовательского сценария
Шаг 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

Добавьте колбэки сценария в класс состояния:

МетодОписание
onSuccess(SuccessResult result)Захват выполнен успешно — возвращает SuccessResult с processId (Unico обрабатывает изображение внутренне)
onErrorSelfie(UnicoError error)Захват не удался — возвращает UnicoError с кодом и описанием
Данные изображения недоступны

В отличие от потока Liveness, колбэк User Journey не возвращает base64 или encrypted. Unico обрабатывает изображение внутренне и возвращает только processId.

@override
void onSuccess(SuccessResult result) {
debugPrint('processId: ${result.processId}');
}

@override
void onErrorSelfie(UnicoError error) { }
Шаг 3 — Вызовите openCameraSelfie

Метод openCameraSelfie открывает камеру. Для пользовательских сценариев передайте webAppToken, предоставленный Unico, вместо JSON-файла с учётными данными:

_opener.openCameraSelfie(
listener: this,
webAppToken: token,
);
Сбор данных мониторинга

Метод openCameraSelfie предоставляет перегрузку, принимающую метаданные через UnicoCheckPrepareInfo для идентификации пользовательской сессии и потока:

  • externalUserId (String, обязательный) — Идентификатор пользователя в вашей системе. Автоматически хешируется с помощью SHA-256 перед передачей.
  • useCase (String, необязательный) — Идентификатор контекста или текущего выполняемого потока. Передаётся в открытом виде.
_opener.openCameraSelfie(
listener: this,
webAppToken: token,
prepareInfo: UnicoCheckPrepareInfo(
externalUserId: 'external_user_id',
useCase: 'use_case', // optional
),
);

Полное описание обработки результата см. в разделе Получение результата.