QoreID Flutter SDK
Note
With this release (v1.1.0), customers can perform all Collection services like VeriFind (digital address verification), Passport, Driver's License and other QoreID services on both Android iOS platforms.
pub.dev Here is an example app
Installation
Using dart
dart pub add qoreidsdk
Using Flutter
flutter pub add qoreidsdk
NOTE!! comment out #use_frameworks! in Podfile before installing cocoapods dependencies
//in your project directory
cd ios
pod install
Note: You are required to rebuild your application after installing the package.
Android
Add the following to your app/build.gradle
//before your dependencies
repositories {
mavenCentral()
google()
maven {
url "https://repo.qoreid.com/repository/maven-releases/"
}
maven { url 'https://jitpack.io' }
}
Add this snippet of code to your app/proguard-rules.pro
-keep class com.qoreid.sdk.** { *; }
-dontshrink
-dontobfuscate
-dontoptimize
If you do not have the file in your ~/app/
directory, create one and add it to ~/app/gradle.build
release configuration as shown below
...
buildTypes {
release {
...
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
...
import the library in MainActivity
import android.os.Bundle
import com.qoreid.qoreidsdk.QoreidsdkPlugin;
Add this snippet of code to your ~/com/example/<app name>/MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
QoreidsdkPlugin.initialize(this);
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
QoreidsdkPlugin.initialize(this)
}
Permissions
Certain services on QoreID require device permissions to work properly. Follow the instructions here to add the required permissions to your ~/android/app/src/main/AndroidManifest.xml
file.
Verifind required permissions
...
<!-- Required for Verifind -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
iOS
Update your AppDelegate.m
QoreidSdK requires the UINavigationController to push a new ViewController to your app. To wrap your app's rootViewController in a UINavigationController. Update your AppDelegate with the following code snippet.
//Runner/AppDelegate.swift
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
var navigationController: UINavigationController!
override func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let controller = window?.rootViewController as! FlutterViewController
GeneratedPluginRegistrant.register(with: self)
// create and then add a new UINavigationController
self.navigationController = UINavigationController(rootViewController: controller)
self.navigationController.setNavigationBarHidden(true, animated: false)
self.window = UIWindow(frame: UIScreen.main.bounds);
self.window.rootViewController = self.navigationController;
self.window.makeKeyAndVisible();
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
Permissions
Added the following to your ~/ios/<app name>/Info.plist
file
...
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We need access to your location to provide you with location-based services, even when the app is in the background.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need access to your location while you are using the app to provide you with location-based services.</string>
<key>NSCameraUsageDescription</key>
<string>We need access to your camera to take photos for profile pictures.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to allow you to select and upload images.</string>
...
If you have use_framework! enabled in your Podfile
Update Podfile (if you have use_framework! enabled)
# REST OF YOUR CODE
...
target 'Your Target' do
use_frameworks!
# REST OF YOUR CODE
# Add the following to add qoreidsdk (or other static frameworks) as a static library
$static_framework = ['qoreidsdk']
pre_install do |installer|
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
installer.pod_targets.each do |pod|
if $static_framework.include?(pod.name)
def pod.build_type;
Pod::BuildType.static_library
end
end
end
end
end
...
# REST OF YOUR CODE
Usage: Example
import 'package:flutter/material.dart';
import 'package:qoreidsdk/qoreidsdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
_qoreidsdkResult();
}
void _qoreidsdkResult() async {
Qoreidsdk.onResult((result) async {
print(result); //{code: E_USER_CANCELED, data: ResultData(customerReference=cus-ref, flowId="543", verification=null, productCode=face_verification), message: User canceled}
//handle in success case e.g use verification ID
if (data["data"] != null) {
print(data["data"]["verification"]["id"]);
}
});
}
void _launchQoreid() async {
// Launch Qoreid app
QoreidData data = QoreidData(
clientId: "", //required
flowId: 0,
customerReference: "cus-ref", //required
productCode: "", //required required for collection
addressData: {},
applicantData: {},
ocrAcceptedDocuments: "",
identityData: {});
await Qoreidsdk.launchQoreid(data);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'Qoreidsdk Exampple',
),
Container(
padding: const EdgeInsets.all(20.0),
width: double.infinity,
child: ElevatedButton(
onPressed: _launchQoreid,
child: const Text('Launch QoreId'),
),
)
],
),
),
);
}
}
Known Flutter Plugin Installation Issue (iOS)
If you are using XCode 15 and encounterErrno::ENOENT - No such file or directory @ rb_sysopen - ~dir/ios/Pods/Local Podspecs/qoreidsdk.podspec.json
Comment qoreidsdk in your .yaml file
Save the changes in .yaml file, run flutter pub get
cd into ios directory run pod install
Uncomment qoreidsdk in your .yaml file
run flutter pub get
cd ios/ && run pod install
flutter run. Your app should work now
Updated 5 months ago