Kvalifika
  • Kvalifika Intro
  • Sign Up
  • Main interface components
  • Initial Setup
    • Setup
    • User Management
    • Branding
    • Configuration
      • Session
      • Liquidation
      • Awaiting Action
      • Extra Fields
      • Web Hooks
      • 2FA
      • High risk countries
    • Security
    • Billing
  • Verification Session
    • Sessions
      • Session Details
    • Awaiting Action
      • Session Details
    • Rejections
      • Session Details
    • Dashboard
    • Activity
  • Integration
    • Integration Guide
    • Initial Setup
    • Integration with WIX
    • Integration with Shopify
  • Web SDK
  • Mobile SDK
    • Android
    • iOS
    • Flutter
    • React Native
Powered by GitBook
On this page
  • Package Installation
  • iOS Specific Steps
  • Android Specific Steps
  • Initialize the SDK
  • Start Verification
  • Handling Verifications
  • Callback Methods
  • Error Codes
  • UI Customizations
  • Appearance
  • Language
  • Development Mode
  • ProGuard (Android)
  1. Mobile SDK

Flutter

Guide for integrating Kvalifika SDK into a Flutter project

PreviousiOSNextReact Native

Last updated 2 years ago

Before integrating Kvalifika, it is recommended to follow the steps described in and .

Naming of the properties and functions might be slightly modified depending on the version.

Package Installation

Kvalifika SDK should be integrated into the existing Flutter project (more information regarding creating Flutter projects is here: )

At the root level of your project, find the pubspec.yaml file and add the following line in the dependencies section:

pubspec.yaml
dependencies:
  kvalifika_sdk: ^0.12.1

iOS Specific Steps

If there is no Podfile in ios folder, run flutter build ios in the terminal of the project folder.

Add sources to Podfile and use minimum iOS version 11.0.

Podfile
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Kvalifika/kvalifika-cocoapods-specs.git'
source 'https://github.com/Kvalifika/zoom-cocoapods-specs.git'

platform :ios, '11.0'

Then navigate to ios folder and run pod install.

pod install might take long time!

Please add the following permissions to your app's Info.plist, so that the Kvalifika iOS SDK can access a user's camera to run a verification. You can do this in the property list view or by code. Right-click on Info.plist and select Open As -> Source Code. Add the lines below somewhere inside the following code:

Info.plist
<!-- permission strings to be include in info.plist -->
<key>NSCameraUsageDescription</key>
<string>Please give us access to your camera, to complete the verification.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Please give us access to your photo library to verify you.</string>

Android Specific Steps

Open android/app/build.gradle file and set minSdkVersion to 21.

android/build.gradle
android {
    ...
    defaultConfig {
        ...
        minSdkVersion 21
        ...
  }
  ...
}

Initialize the SDK

To initialize Kvalifika SDK, it first should be imported:

import 'package:kvalifika_sdk/kvalifika_sdk.dart';

After this, it is needed to initialize SDK with your appId:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Kvalifika'),
        ),
        body: KvalifikaSdk(
          appId: "YOUR APP ID",
          locale: KvalifikaSdkLocale.EN,
          builder: (context, sdk) => Center(
            child: ElevatedButton(
              onPressed: () {
                sdk.startSession();
              },
              child: Text('Start Verification'),
            ),
          ),
        ),
      ),
    );
  }
}

Start Verification

Call sdk.startSession() on button click:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Kvalifika'),
        ),
        body: KvalifikaSdk(
          appId: "YOUR APP ID",
          locale: KvalifikaSdkLocale.EN,
          builder: (context, sdk) => Center(
            child: ElevatedButton(
              onPressed: () {
                // Start session on button press
                sdk.startSession();
              },
              child: Text('Start Verification'),
            ),
          ),
        ),
      ),
    );
  }
}

Handling Verifications

It's useful to know that if a user has completed the verification flow or canceled it. For this, you can implement the callback methods:

Callback Methods

Method

Description

onInitialize

This callback method is triggered when SDK initializes

onStart

This callback method is triggered when user starts verification

onFinish

This callback method is triggered when user completes verification. Get session data here

onError

KvalifikaSdk(
  appId: "YOUR APP ID",
  onInitialize: (context, sdk) {
    // Start session after initialization
    sdk.startSession();
  },
  onStart: (context, sessionId) {

  },
  onFinish: (context, sessionId) {
    // Fetch session data from your backend server here
  },
  onError: (context, error, message) {
    if (error == KvalifikaSdkError.INVALID_APP_ID) {

    }

    if (error == KvalifikaSdkError.USER_CANCELLED) {

    }

    if (error == KvalifikaSdkError.TIMEOUT) {

    }

    if (error == KvalifikaSdkError.USER_CANCELLED) {

    }

    if (error == KvalifikaSdkError.SESSION_UNSUCCESSFUL) {

    }

    if (error == KvalifikaSdkError.ID_UNSUCCESSFUL) {

    }

    if (error == KvalifikaSdkError.CAMERA_PERMISSION_DENIED) {

    }

    if (error == KvalifikaSdkError.LANDSCAPE_MODE_NOT_ALLOWED) {

    }

    if (error == KvalifikaSdkError.REVERSE_PORTRAIT_NOT_ALLOWED) {

    }

    if (error == KvalifikaSdkError.FACE_IMAGES_UPLOAD_FAILED) {

    }

    if (error == KvalifikaSdkError.DOCUMENT_IMAGES_UPLOAD_FAILED) {

    }

    if (error == KvalifikaSdkError.UNKNOWN_INTERNAL_ERROR) {

    }
  },
  builder: (context, sdk) => Center(
    child: ElevatedButton(
      onPressed: () {
        sdk.startSession();
      },
      child: Text('Start Verification'),
    ),
  ),
)

Error Codes

Error Code

Description

INVALID_APP_ID

Kvalifika AppId (Application ID) is incorrect

USER_CANCELLED

User cancelled the session before completing verification

TIMEOUT

Session is cancelled due to inactivity

SESSION_UNSUCCESSFUL

The Session was not performed successfully

ID_UNSUCCESSFUL

The ID Scan was not performed successfully and identity document data was not generated

CAMERA_PERMISSION_DENIED

Camera is required but access is prevented by user settings

LANDSCAPE_MODE_NOT_ALLOWED

Verification session is cancelled because the device is in landscape mode

REVERSE_PORTRAIT_NOT_ALLOWED

Verification session is cancelled because device is in reverse portrait mode

FACE_IMAGES_UPLOAD_FAILED

Could not upload face images. Internal request failed.

DOCUMENT_IMAGES_UPLOAD_FAILED

Could not upload ID card or passport images. Internal request failed.

UNKNOWN_INTERNAL_ERROR

Verification session failed because of an unhandled internal error. This error comes with a message.

UI Customizations

Appearance

It is possible to customize logo and icons for the application.

In Flutter we need to add the images in android and ios subfolders in the project directory.

Open android subfolder in Android Studio and drag the image to res/drawable folder.

Open ios subfolder in XCode. Open Assets.xcassets folder and drag the image.

An image name in android and ios subfolders must match.

KvalifikaSdk(
  appId: "YOUR APP ID",
  logo: "logo",
  documentIcon: "document_icon",
  cancelIcon: "cancel_icon",
  activeFlashIcon: "active_flash_icon",
  inactiveFlashIcon: "inactive_flash_icon",
  builder: (context, sdk) => Center(
    child: ElevatedButton(
      onPressed: () {
        sdk.startSession();
      },
      child: Text('Start Verification'),
    ),
  ),
)

Language

It is possible to set locale when initializing SDK. Supported locales are:

Code

Language

EN

English

GE

Georgian

KvalifikaSdk(
  appId: "YOUR APP ID",
  locale: KvalifikaSdkLocale.EN
)

Development Mode

KvalifikaSdk(
  appId: "YOUR APP ID",
  development: true
)

ProGuard (Android)

If ProGuard is used in Android release build, it is possible to add the following options to ProGuard file:

-keep class com.facetec.sdk.** { *; }

appId is Application ID, generated from Admin Panel. See for details.

This callback method is triggered on error (see for more information)

Without specifying mode SDK uses

With development mode ON SDK uses

Integration Guide
Initial Setup
Flutter - Get Started
https://api.kvalifika.com
https://apistaging.kvalifika.com
Error Codes
Initial Setup