Skip to main content

Introduction

This is the documentation for our Flutter bindings for Amani eKYC platform SDK.

On the example folder at our repository you can find a close to real world solution on how to use this SDK.

Preparation

To setup this SDK correcty, you must complete the steps below

Requirements​

The minimum requirements for this SDK are:

  • iOS 13.0 or higher
  • XCode 14 or higher
  • Android API 23 or higher

Installation​

Adding the flutter plugin​

To add this flutter plugin you must add the lines below to your pubspec.yaml file.

flutter_amanisdk:
git:
url: https://github.com/AmaniTechnologiesLtd/Flutter_v2
ref: '2.2.0'

Upload results with documentId​

Starting with version 2.2.0, every module's upload() method accepts an optional onResult callback that returns the documentId of the uploaded document. To use it, your project needs the versions below.

ComponentMinimum version
flutter_amanisdk plugin2.2.0
Android native SDK (ai.amani.android:AmaniAi)3.21.7
iOS native SDK (AmaniSDK pod)3.7.6

On iOS, the plugin's podspec pulls AmaniSDK 3.7.6 automatically. If your Podfile.lock keeps an older version, run the command below in your ios folder.

pod install --repo-update

You don't need any extra import to pass an inline callback. If you want to keep the callback in a typed variable, import the UploadResultCallback type.

import 'package:flutter_amanisdk/common/models/upload_result.dart';

final UploadResultCallback onUploadResult = (isSuccess, documentId) {
print("Upload finished: $isSuccess, documentId: $documentId");
};

await AmaniSDK().getIDCapture().upload(onResult: onUploadResult);

For Android devices​

Add your artifact repository to the repositories section of your projects gradle file.

rootProject.allprojects {
repositories {
google()
mavenCentral()
maven { url "https://jfrog.amani.ai/artifactory/amani-sdk" }
jcenter()
}
}

On the module's gradle file, add our native android SDK to the dependencies

dependencies {
implementation 'ai.amani.android:AmaniAi:3.21.7'
}

If you use the Speech Verifier module on Android, add its dependency to your app module too. Starting with version 2.2.0, the plugin doesn't bundle it anymore.

dependencies {
implementation 'ai.amani.android:amani-speech-verifier:1.0.0'
}

On the same file, add this block to the android section

aaptOptions {
noCompress "tflife"
}

Android Proguard Rules​

Add this into your proguard-rules.pro

-keep class ai.amani.flutter_amanisdk_v2
-keep class ai.** {*;}
-dontwarn ai.**
-keep class datamanager.** {*;}
-dontwarn datamanager.**
-keep class networkmanager.** {*;}
-dontwarn networkmanager.**

-keep class org.jmrtd.** {*;}
-keep class net.sf.scuba.** {*;}
-keep class org.bouncycastle.** {*;}
-keep class org.spongycastle.** {*;}
-keep class org.ejbca.** {*;}

-dontwarn org.ejbca.**
-dontwarn org.bouncycastle.**
-dontwarn org.spongycastle.**
-dontwarn org.jmrtd.**
-dontwarn net.sf.scuba.**

-keep class org.tensorflow.lite**{ *; }
-dontwarn org.tensorflow.lite.**
-keep class org.tensorflow.lite.support**{ *; }
-dontwarn org.tensorflow.lite.support**

Changing the MainActivity type​

For this Flutter Plugin to work, you must change your MainActivity class to implement FlutterFragmentActivity. This change is required otherwise you'll have runtime issues

Example Mainactivity.ky

package ai.amani.flutter_amanisdk_example

import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity: FlutterFragmentActivity() {}

Update your AndroidManifest.xml​

You must add tools:replace="android:label, android:name" on your main AndroidManifest.xml file.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" # this line must be added
package="ai.amani.amanisdk_example">
<application
android:label="amanisdk_example"
android:name="${applicationName}"
tools:replace="android:label, android:name" #this line must be added
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
tools:replace="android:theme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">

For iOS devices​

Add these lines on your Podfile\

source "https://github.com/AmaniTechnologiesLtd/Mobile_SDK_Repo"
source "https://github.com/CocoaPods/Specs"

If not yet set the default iOS version to 13

platform :ios, '13.0'

iOS Permission​

iOS permissions​

You have to add these permissions into your info.plist file. The permissions below must be added according to your usage and you're required to add these permissions for app submission.

For NFC:

    <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
</array>
<key>NFCReaderUsageDescription</key>
<string>This application requires access to NFC to scan IDs.</string>

For Location:

	<key>NSLocationWhenInUseUsageDescription</key>
<string>This application requires access to your location to upload the document.</string>
<key>NSLocationUsageDescription</key>
<string>This application requires access to your location to upload the document.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This application requires access to your location to upload the document.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This application requires access to your location to upload the document.</string>

For Camera:

	<key>NSCameraUsageDescription</key>
<string>This application requires access to your camera for scanning and uploading the document.</string>

Note: You need to add all keys according to your usage.

Grant access to NFC​

Grant access to NFC​

Enable the Near Field Communication Tag Reading capability in the target Signing & Capabilities.

Building for devices that don’t support NFC​

For the devices that don’t support NFC (like iPhone 6), there is no CoreNFC library in the system and we are also using some iOS crypto libraries for reading NFC data supported after iOS 13. You need to add libraries below as optional under the Build Phases->Link Binary With Libraries menu. Even if you don't use the NFC process, you should add this libraries below.

CoreNFC.framework
CryptoKit.framework
CryptoTokenKit.framework