User Journeys
User Journeys sind mehrstufige Aufnahmesitzungen, die vom SDK in Verbindung mit dem konfigurierten Ablauf orchestriert werden. Zum Beispiel führt der Ablauf idchecktrustdocssign Selfie + Dokument + Unterschrift in einer einzigen Sitzung aus.
Die verfügbaren Journeys hängen von dem für Ihre Integration konfigurierten Ablauf ab. Die vollständige Zuordnung von Anwendungsfall → Ablauf → Funktion finden Sie unter Anwendungsfälle.
Das Plugin delegiert an die zugrunde liegenden nativen SDKs:
- Das Plugin öffnet die Kamera (Android oder iOS) mit dem SmartFrame-Overlay.
- Das native SDK orchestriert die für den Ablauf erforderliche Aufnahmesequenz (Selfie, Dokument, Unterschrift).
- Das SDK leitet die Ergebnisse intern an Unico weiter — der Client empfängt oder verwaltet Bilddaten niemals direkt.
- Gibt ein
SuccessResult-Objekt mit einerprocessIdüber den Plattformkanal zurück.
Die Orchestrierung wird vollständig vom SDK übernommen — Sie müssen die Schrittsequenz nicht in Ihrem Dart-Code implementieren.
Das SDK hat standardmäßig intelligentes Framing und automatische Aufnahme aktiviert. Konfigurieren Sie den Kameramodus in Ihrem Builder wie folgt:
UnicoCheckCameraOpener _opener = new UnicoCheck(this)
.setAutoCapture(autoCapture: true)
.setSmartFrame(smartFrame: true)
.build();
Die false/true-Werte für die obigen Methoden ändern nicht das Aufnahmeerlebnis; sie werden nur für die interne Logik des SDK verwendet.
Schritt 1 — UnicoListener implementieren
UnicoListener verarbeitet die SDK-Lifecycle-Callbacks. Implementieren Sie die vier obligatorischen Methoden:
| Methode | Wann sie aufgerufen wird |
|---|---|
onErrorUnico(error) | Ein Fehler ist während des SDK-Betriebs aufgetreten |
onUserClosedCameraManually() | Der Benutzer hat die Kamera manuell geschlossen |
onSystemClosedCameraTimeoutSession() | Das 40-Sekunden-Sitzungslimit wurde erreicht |
onSystemChangedTypeCameraTimeoutFaceInference() | Kein Gesicht für 13 Sekunden erkannt — wechselt zur manuellen Aufnahme |
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {
late UnicoCheckBuilder _unicoCheck;
@override
void onErrorUnico(UnicoError error) {}
@override
void onUserClosedCameraManually() {}
@override
void onSystemClosedCameraTimeoutSession() {}
@override
void onSystemChangedTypeCameraTimeoutFaceInference() {}
}
Alle vier oben genannten Listener-Methoden müssen in Ihrem Projekt erstellt werden (auch ohne jegliche Logik). Andernfalls wird das Projekt nicht erfolgreich kompiliert.
Schritt 2 — Journey-Listener für UnicoSelfie implementieren
Fügen Sie die Journey-Callbacks zu Ihrer State-Klasse hinzu:
| Methode | Beschreibung |
|---|---|
onSuccess(SuccessResult result) | Aufnahme erfolgreich — gibt SuccessResult mit processId zurück (Unico verarbeitet das Bild intern) |
onErrorSelfie(UnicoError error) | Aufnahme fehlgeschlagen — gibt einen UnicoError mit Code und Beschreibung zurück |
Im Gegensatz zum Liveness-Ablauf gibt der User Journey-Callback weder base64 noch encrypted zurück. Unico verarbeitet das Bild intern und gibt nur eine processId zurück.
@override
void onSuccess(SuccessResult result) {
debugPrint('processId: ${result.processId}');
}
@override
void onErrorSelfie(UnicoError error) { }
Schritt 3 — openCameraSelfie aufrufen
Die Methode openCameraSelfie öffnet die Kamera. Für User Journeys übergeben Sie das von Unico bereitgestellte webAppToken anstelle einer JSON-Anmeldeinformationsdatei:
_opener.openCameraSelfie(
listener: this,
webAppToken: token,
);
Die Methode openCameraSelfie bietet eine Überladung, die Metadaten über UnicoCheckPrepareInfo akzeptiert, um die Identifizierung der Benutzersitzung und des Ablaufs zu unterstützen:
externalUserId(String, erforderlich) — Benutzeridentifikator in Ihrem System. Wird automatisch mit SHA-256 gehasht, bevor die Übertragung erfolgt.useCase(String, optional) — Identifikator für den aktuell ausgeführten Kontext oder Ablauf. Wird im Klartext übertragen.
_opener.openCameraSelfie(
listener: this,
webAppToken: token,
prepareInfo: UnicoCheckPrepareInfo(
externalUserId: 'external_user_id',
useCase: 'use_case', // optional
),
);
Die vollständige Ergebnisverarbeitung finden Sie unter Ergebnis empfangen.