Vove Flutter SDK Guide

Based on the official Vove documentation at docs.voveid.com/docs/sdks/flutter.

Overview

The vove_id_flutter plugin wraps the native Vove iOS and Android SDKs to deliver a single, idiomatic Dart API for ID verification, KYC, and AML compliance. It supports:

  • Sandbox and production environments
  • Full-screen or custom UI flows
  • Locale overrides
  • Vocal guidance
  • Per-step exits and next-step routing
  • Max-attempt callbacks

Installation

Add the dependency to your pubspec.yaml:

dependencies:
  vove_id_flutter: ^1.6.0

Then run flutter pub get.

Initialization

Call Vove.initialize as soon as your verification UI loads—before you invoke Vove.start—to ensure the native SDK is ready. For most apps this happens when the screen that initiates verification is displayed:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Vove.initialize(
    environment: VoveEnvironment.sandbox, // or production
    publicKey: 'YOUR_PUBLIC_KEY',
  );
  runApp(const MyApp());
}

Starting a Verification Session

Generate a session token on your backend (see Vove’s REST API docs) and pass it to Vove.start. The call returns a VoveVerificationResult describing the current status and the next required step (when exitAfterEachStep is enabled).

final config = VoveStartConfiguration(
  showUI: true,
  exitAfterEachStep: false,
  onMaxAttemptsReached: () {
    // e.g., prompt the user to contact support
  },
);

final result = await Vove.start(
  sessionToken: 'SESSION_TOKEN_FROM_BACKEND',
  configuration: config,
  locale: VoveLocale.fr,
  enableVocalGuidance: true,
);

switch (result.status) {
  case VoveVerificationStatus.success:
    // grant access
    break;
  case VoveVerificationStatus.pending:
    // wait for manual review
    break;
  case VoveVerificationStatus.maxAttempts:
    // show support options
    break;
  default:
    // handle other outcomes
}

Configuration Options

Field Type Default Description
showUI bool true Displays Vove’s built-in welcome/summary screens. Disable to provide your own UI.
exitAfterEachStep bool false Returns control after each step (e.g., ID_DOCUMENT, LIVENESS) so you can interleave your own flows.
onMaxAttemptsReached VoidCallback? null Invoked when the user reaches the maximum verification attempts.
locale VoveLocale? en Overrides the SDK UI language (en, fr, ar, de, arMA).
enableVocalGuidance bool? false Plays voice instructions during the 3D liveness step.

Result Values

VoveVerificationStatus can be:

  • success
  • pending
  • canceled
  • maxAttempts

When exitAfterEachStep is true, result.nextStep indicates the next action (ID_DOCUMENT, LIVENESS, ADDRESS_PROOF, CAR_REGISTRATION_DOCUMENT, DRIVING_LICENSE, DONE, or unknown).

Troubleshooting

Issue Fix
VoveStartConfiguration not found (iOS) Run pod repo update && pod install so VoveSDK ≥ 1.5.0 is fetched.
Crash on iOS: mprotect failed Ensure the Runner target uses the provided entitlements (Runner/DebugProfile.entitlements).
maxAttempts callback never fires Supply onMaxAttemptsReached in VoveStartConfiguration; the native bridges invoke it immediately when the SDK raises the event.
Session token rejected Confirm your backend uses Vove’s Verification Session API and you’re passing the fresh token unmodified.

For additional guidance, contact Vove support via the dashboard or reference the official Flutter documentation (docs.voveid.com/docs/sdks/flutter).