01
What it does
A React Native SDK for identity verification flows on iOS and Android. It wraps biometric authentication (Face ID, Touch ID, Android BiometricPrompt) and document capture (camera plus rectangle detection) behind a single TypeScript API.
02
Usage
import { QuickVerifySDK } from "@quickverify/react-native-sdk"
const sdk = QuickVerifySDK.getInstance({ enableFaceID: true })
const result = await sdk.performVerification()
// { success, biometricVerified, documentCaptured, documentImageUri }Single shot helpers are also exported for apps that only need biometrics or only need document capture:
import { authenticateWithBiometric, captureDocument } from "@quickverify/react-native-sdk"
await authenticateWithBiometric("Verify your identity")
const doc = await captureDocument()
// doc.imageUri points to a local file03
iOS
Native code is Swift. QuickVerifyBiometricManager wraps LAContext from LocalAuthentication and exposes a clean async API across the bridge. QuickVerifyDocumentCapture uses AVFoundation for the camera feed and the Vision framework's VNDetectRectanglesRequest for live edge detection. Captured frames are written to the app's documents directory and the SDK returns a file:// URI so the JS layer never has to handle raw pixel buffers.
The bridge is an Objective-C file (QuickVerifySDK.m) that exposes the Swift methods to React Native and emits real time events for detected document corners and processing state.
04
Android
Native code is Kotlin. QuickverifySdkModule is the React Native bridge module. QuickverifyBiometricActivity wraps androidx.biometric.BiometricPrompt. Images are saved through MediaStore and surfaced as content URIs, which removes the need to request external storage permissions on API 33+. The package is registered through QuickverifySdkPackage.kt.
Runtime permission for the camera must be requested by the host app before captureDocument is called, because RN modules cannot present permission dialogs on Android themselves.
05
Events
Both platforms emit through RCTEventEmitter so the JS side can subscribe to corner detection and processing updates without polling:
useEffect(() => {
const sub = sdk.onDocumentDetected(corners => {
// draw overlay
})
return () => sub.remove()
}, [])06
Requirements
| Platform | Version |
|---|---|
| iOS | 13.0+ (Swift 5.9) |
| Android | API 33+ (Kotlin 1.9) |
| React Native | 0.70.0+ |
Info.plist needs NSCameraUsageDescription and NSFaceIDUsageDescription. AndroidManifest.xml needs android.permission.CAMERA.
07
Playground
A working playground app lives in QuickVerifyPlayground/. It is the same app used in the SDK's integration tests, so it doubles as a quickstart and a regression harness.
