Last updated:
0 purchases
intp flutter liveness sdk
LivenessCamera SDK Guide #
Platform Support #
Android
iOS
✔️
✔️
Installation #
iOS #
Add three rows to the ios/Runner/Info.plist:
one with the key Privacy - Camera Usage Description and a usage description.
one with the key Privacy - Microphone Usage Description and a usage description.
Editing Info.plist as text, add:
<key>NSCameraUsageDescription</key>
<string>Camera Access</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone Access</string>
copied to clipboard
Android #
Change the minimum Android sdk version to 21 (or higher) in your android/app/build.gradle file.
minSdkVersion 21
copied to clipboard
Usage #
You can use LivenessCamera SDK to detection step of your e-KYC flow. This works both on Android and iOS.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intp_flutter_liveness_sdk/intp_flutter_liveness_sdk.dart';
Future<void> main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Liveness detection'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<String?> buildDialog(Map<String, dynamic> value) {
debugPrint("_buildDialog: $value");
String content = "Detection failed !!!";
if (value['Liveness'] != null && value['Liveness']['detectSuccess']) {
content = "Detection success !!!";
}
if (value['statusCode'] != null && value['statusCode'] != 200) {
content = "Error : $value";
}
return showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
title: const Text('Result'),
content: Text(content),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context, 'OK'),
child: const Text('OK'),
),
],
),
);
}
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: SafeArea(
child: LivenessCamera(
livenessResponse: (Map<String, dynamic> value) {
// handle your next event or navigation from below
buildDialog(value);
},
endpoint: "API_ENDPOINT",
apiKey: "API_KEY",
transactionId: "TRANSACTION_ID",
// actionsInstruction: const {
// 'SHAKE_LEFT': 'New caption turn your head left',
// 'SHAKE_RIGHT': 'New caption turn your head right',
// 'NOD_HEAD': "New caption nod your head",
// 'MOUTH': "New caption open your mouth",
// },
// numberOfActions: 2,
// numberOfRetry: 1,
// backgroundColor: Colors.red,
// fontFamily: "Kanit-Regular", /* Load font from assets */
),
),
);
}
}
copied to clipboard
Options #
Available options in LivenessCamera
Property
Type
Status
Default
Description
livenessResponse
Function
required
Receiving function for liveness result
endpoint
String
required
The API endpoint
apiKey
String
required
The API key generated from Finema for the customer to use
transactionId
String
required
The transaction id generated from Finema for the customer to use
actionsInstruction
Map<String, dynamic>
optional
{ 'SHAKE_LEFT': 'Turn your head left', 'SHAKE_RIGHT': 'Turn your head right', 'NOD_HEAD': 'Nod your head', 'MOUTH': 'Open your mouth',}copied to clipboard
Custom text instruction each action
numberOfActions
Int
optional
1
The number of randomised action out of 4 actions ['SHAKE_LEFT', 'SHAKE_RIGHT', 'NOD_HEAD', 'MOUTH'] This value can be between 1 and 4
numberOfRetry
Int
optional
0
The number of retries that should be performed if the user fails the liveness check. The SDK will repeat up to and including this if the user fails the test repeatedly before failing the entire flow
backgroundColor
Color
optional
Colors.white
Background color
fontFamily
String
optional
"Roboto"
Font family from your assets
prepareText
String
optional
"Ensure your face is in the circle"
Prepare text
titleFontColor
Color
optional
Colors.black87
Font color
titleFontSize
Double
optional
20
Font size
loadingColor
Color
optional
Colors.white
Loading indicator color
loadingSize
Double
optional
20
Loading indicator size
loadingText
String
optional
"Loading..."
Loading text
verifyText
String
optional
"Verify..."
Verify text
loadingFontColor
Color
optional
Colors.white
Text color of loadingText, verifyText
loadingFontSize
Double
optional
16
Text size of loadingText, verifyText
subtitleFontSize
Double
optional
12
Text size of recordText, uploadText
recordText
String
optional
"Recording in process..."
Indicator record step
uploadText
String
optional
"Upload in process..."
Indicator upload step
buttonLabel
String
optional
"Tap to start"
Button label
buttonStyle
ButtonStyle
optional
ButtonStyle( backgroundColor: MaterialStateProperty.all(Colors.blue), textStyle: MaterialStateProperty.all( TextStyle( fontFamily: widget.fontFamily ), ),),copied to clipboard
Custom button style for look and feel match your CI
buttonPadding
EdgeInsets
optional
EdgeInsets.all(25)
Padding of button
hintPositionFromBottom
Double
optional
screen height * 0.15
Adjust hint position from bottom
buttonPositionFromBottom
Double
optional
screen height * 0.01
Adjust button position from bottom
Response #
Available properties in response
Property
Type
Description
detectSuccess
Boolean
Detection status
detectActionsResult
Array of object
Array of detection results
totalRetry
Int
Total number of retry
statusCode
Int
HTTP response error status codes
errorMessage
String
HTTP response error message
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.