SDKs: Android, iOS, React Native, Flutter and web
One SDK for Android, iOS, React Native, Flutter and web. Each is installed once, started when the app opens and called at each moment, and each returns the same decision object. The verification modules run inside the same SDK where your journey needs them.
Names and fields are illustrative and agreed in the sandbox before any contract.
On this page
What the SDK reads
Once started, the SDK reads the session for you. Your app passes its own identifiers and the event’s details, never the signals. What the server decides is read against everything the session has bound and read before.
| Module | What it reads |
|---|---|
| Silent network verification |
|
| SIM and device binding |
|
| Liveness and face match |
|
| Device intelligence |
|
| Behavioural biometrics |
|
| Scam signals |
|
| Payee and mule graph |
|
The verification modules, eKYC, document verification, liveness and face match, video KYC, KYB, AML screening and bank account verification, run at sign-up and wherever your journey calls for them again, through the same SDK. See the platform overview.
Android
Kotlin. Install the package, start the SDK once, then call decide at each moment. The first call here is the login.
Install
build.gradle.kts
dependencies {
implementation(
"com.deepidsdk:deepid-android:<version>"
)
}Start once
App.kt
// Application.onCreate: once, before the first screen
DeepID.start(this, key = BuildConfig.DEEPID_SANDBOX_KEY)First call
LoginViewModel.kt
val decision = DeepID.decide(
Event.LoginAttempt(customer = user.id)
)
when (decision.action) {
Action.ALLOW -> signIn()
else -> show(decision.message)
}iOS
Swift. Install the package, start the SDK once, then call decide at each moment. The first call here is the login.
Install
Package.swift
dependencies: [
.package(
url: "<package-url>",
from: "<version>"
)
]Start once
App.swift
// App init: once, before the first screen
DeepID.start(key: Config.deepidSandboxKey)First call
LoginModel.swift
let decision = try await DeepID.decide(
.loginAttempt(customer: user.id)
)
switch decision.action {
case .allow: signIn()
default: show(decision.message)
}React Native
TypeScript. Install the package, start the SDK once, then call decide at each moment. The first call here is the login.
Install
Terminal
npm install @deepid/react-nativeStart once
app.ts
import { DeepID } from "@deepid/react-native"
// Once, before the first screen
DeepID.start({ key: DEEPID_SANDBOX_KEY })First call
login.ts
const decision = await DeepID.decide(
"login.attempt",
{ customer: user.id },
)
if (decision.action === "allow") signIn()
else show(decision.message)Flutter
Dart. Install the package, start the SDK once, then call decide at each moment. The first call here is the login.
Install
Terminal
flutter pub add deepid_flutterStart once
main.dart
import 'package:deepid_flutter/deepid.dart';
// Once, before the first screen
await DeepID.start(key: deepidSandboxKey);First call
login.dart
final decision = await DeepID.decide(
LoginAttempt(customer: user.id),
);
if (decision.action == DecisionAction.allow) {
signIn();
} else {
show(decision.message);
}Web
TypeScript. Install the package, start the SDK once, then call decide at each moment. The first call here is the login.
Install
Terminal
npm install @deepid/webStart once
app.ts
import { createDeepID } from "@deepid/web"
// Once, as the page loads
const deepid = createDeepID({ key: DEEPID_SANDBOX_KEY })First call
login.ts
const decision = await deepid.decide(
"login.attempt",
{ customer: user.id },
)
if (decision.action === "allow") signIn()
else show(decision.message)What each route asks for
The SDK asks the customer for a permission only at the moment the route that needs it runs, and never for a route your policy does not use. The routes are the network check, the SIM check, Aadhaar consent and a one-time code, in that order, with the first that verifies ending it; a face check runs where the policy steps up.
| Platform | Asks for |
|---|---|
| Android |
|
| iOS |
|
| React Native |
|
| Flutter |
|
| Web |
|
Packages and versions
The <version> and <package-url> placeholders are filled in with your sandbox access, together with the minimum Android and iOS versions each SDK supports.
What the SDK adds to your app’s size and start-up, and how long a decision takes inside your journey, are measured in the sandbox on your own app and traffic. No figure for either is published on this site.
Wire one moment in the sandbox, before any contract.
Sign-up or login end to end, with the decision back in the app and as an event, so your engineers see the shape of it before anyone signs anything.