入门
在 实时摄像头演示页面 上立即体验 Web SDK — 自动文档捕获、人脸活体检测、人脸验证和被动活体检测,全部在您的浏览器中运行。
iApp eKYC SDK 是一套免费的开源(Apache-2.0)客户端 SDK,适用于 iApp Technology 的企业级 eKYC API — 自动泰语身份 证/护照捕获、人脸活体检测、人脸验证和被动活体检测 — 支持 Web (HTML5/JavaScript)、Flutter (Android/iOS)、原生 iOS (Swift/Objective-C)、原生 Android (Kotlin/Java) 和 React Native。
Web 和 Flutter 包直接在设备上运行捕获引擎。原生 iOS、Android 和 React Native 包是围绕同一生产 Web 引擎的薄层封装 — 在任何地方都具有相同的捕获质量,并且几乎没有增加二进制大小。有关这些平台的信息,请参阅 iOS、Android 和 React Native。
SDK 本身是免费的。API 调用按每次请求计费到您的 iApp API 密钥,费率与直接调用 API 相同 — 有关费用,请参阅每个功能页面。
源代码: https://github.com/iapp-technology/iapp-ekyc-sdk
SDK 为您提供的功能
| 功能 | SDK 功能 | API 计费 |
|---|---|---|
| 身份证自动捕获 | 检测卡片边界,等待清晰稳定的帧,进行透视校正,提交 | 1.25 张身份证正面 / 0.75 张身份证背面 |
| 护照自动捕获 | 相同的引擎,针对护照数据页(MRZ)进行优化 | 0.75 张身份证 |
| 官方证件自动捕获 | 驾驶证、存折、带签名的身份证 | 1.0–1.25 张身份证/页 |
| 人脸活体检测 | 随机设备内挑战,最佳帧选择,服务器签名验证 | 1 次 |
| 人脸验证 | 一次调用比较两张面部图像 | 0.3 次 |
| 人脸被动活体检测 | 单图像防伪检查 | 0.3 次 |
安装
Flutter
在 pubspec.yaml 中将 SDK 添加为 Git 依赖项:
dependencies:
iapp_ekyc_sdk:
git:
url: https://github.com/iapp-technology/iapp-ekyc-sdk.git
path: flutter
import 'package:iapp_ekyc_sdk/iapp_ekyc_sdk.dart';
final client = IappEkycClient(apiKey: 'YOUR_API_KEY');
Web
从 npm 安装:
npm install @iapp-technology/ekyc-sdk
import { IappEkyc } from '@iapp-technology/ekyc-sdk';
const ekyc = new IappEkyc({ apiKey: 'YOUR_API_KEY' });
或者通过 script 标签加载 UMD 包,它会公开
window.IappEkyc 命名空间(类位于其中):
<script src="https://unpkg.com/@iapp-technology/ekyc-sdk"></script>
<script>
const ekyc = new window.IappEkyc.IappEkyc({ apiKey: 'YOUR_API_KEY' });
</script>
iOS (Swift / Objective-C)
Xcode → File → Add Package Dependencies… → https://github.com/iapp-technology/iapp-ekyc-sdk → product IappEkyc:
import IappEkyc
let config = IappEkycConfig(apiKey: "YOUR_API_KEY", flow: .documentCapture)
config.documentType = .thaiIdFront
IappEkycSdk.present(from: self, config: config) { result in /* ... */ }
完整设置(权限、Objective-C、结果):iOS、Android 和 React Native。
Android (Kotlin / Java)
通过 JitPack:
// app/build.gradle.kts — 在 repositories 中加上 maven("https://jitpack.io")
dependencies { implementation("com.github.iapp-technology:iapp-ekyc-sdk:v0.2.0") }
val ekyc = registerForActivityResult(IappEkycContract()) { result -> /* ... */ }
ekyc.launch(IappEkycRequest.DocumentCapture(config, EkycDocumentType.THAI_ID_FRONT))
完整设置(Java 回调 API、结果):iOS、Android 和 React Native。
React Native
git clone https://github.com/iapp-technology/iapp-ekyc-sdk
npm install ./iapp-ekyc-sdk/react-native react-native-webview
<IappEkycFlow flow="documentCapture" documentType="thaiIdFront"
apiKey="YOUR_API_KEY" onResult={...} onError={...} onCancel={...} />
完整设置(权限、Modal 用法):iOS、Android 和 React Native。
API 密钥设置
从 API 密钥管理 页面获取 API 密钥。
任何包含在客户端应用中的密钥都可以被提取(APK 反编译、浏览器开发者工具)。对于生产环境,请使用 后端代理模式:将 SDK 指向您自己的后端,并将 iApp 密钥保留在服务器端。
IappEkycClient(apiKey: '', baseUrl: 'https://your-backend.example.com/ekyc')
当 apiKey 为空时,SDK 不发送 apikey 头;您的代理会附加真实密钥并转发到 https://api.iapp.co.th。至少,为每个应用创建一个专用的受限密钥,这样就可以独立吊销泄露的密钥。完整指南:GitHub 上的 SECURITY.md。
主题
所有平台都提供相同的专业 浅蓝色默认主题,并接受完全覆盖。令牌名称和默认值在各平台之间是相同的(原生包装器通过它们的配置对象传递相同的令牌):
| 令牌 | 默认值 | 用途 |
|---|---|---|
primary | #0284C7 | 按钮、活动引导框、进度 |
primaryDark | #0C4A6E | 标题、指令文本 |
primaryLight | #BAE6FD | 空闲引导框、微妙的强调 |
surface | #F0F9FF | 面板、指令提示 |
onPrimary | #FFFFFF | 主要颜色上的文本/图标 |
success | #22C55E | 四个角锁定、挑战通过 |
warning | #F59E0B | 保持静止/太模糊 |
error | #EF4444 | 失败 |
overlayScrim | #0C4A6E (60%) | 引导框外的相机覆盖层 |
brandDeep | #113F7B | 可选的 iApp 品牌强调 |
borderRadius | 16 | 提示、按钮、结果卡片 |
guideStrokeWidth | 3 | 引导框描边 |
fontFamily | 平台默认 | 可选覆盖 |
Flutter — EkycTheme 是一个普通的不可变类(不依赖于 Theme.of):
const theme = EkycTheme.lightBlue; // 默认
final custom = EkycTheme.lightBlue.copyWith(
primary: Color(0xFF113F7B),
borderRadius: 12,
);
DocumentCaptureView.start(context, theme: custom, ...);
Web — 令牌作为 CSS 自定义属性注入到挂载元素上:
new IappEkyc({ apiKey, theme: { primary: '#113F7B', borderRadius: 12 } });
/* 或者使用纯 CSS 覆盖 */
#ekyc-mount { --iapp-ekyc-primary: #113f7b; --iapp-ekyc-border-radius: 12px; }
更多详情:GitHub 上的 THEMING.md。
本地化
所有 UI 字符串都提供 英语、泰语和中文:
// Flutter
DocumentCaptureView.start(context, client: client,
documentType: DocumentType.thaiIdFront, locale: EkycLocale.th);
// Web: 'en' | 'th' | 'zh'
await ekyc.captureDocument({ mount, documentType: 'thaiIdFront', locale: 'th' });
原生包装器接受相同的语言环境:config.locale = .th (iOS)、.locale(EkycLocale.TH) (Android)、locale="th" (React Native)。
平台要求
Flutter
- Flutter ≥ 3.32 / Dart ≥ 3.8
- Android:
minSdk 24 - iOS: 15.5+ 并在
Info.plist中有一个NSCameraUsageDescription条目(有关所需的权限字符串,请参阅仓库中的flutter/example应用)
Web
- 支持 WebAssembly 和
getUserMedia的现代浏览器 - 需要 HTTPS(或
localhost) — 浏览器会阻止不安全来源的摄像头访问 - OpenCV/MediaPipe 资产仅在开始捕获流程时延迟加载;如果您的 CSP 禁止 CDN 请求,请通过
assetBaseUrl选项自托管它们
iOS / Android / React Native(原生包装器)
- iOS: 15+ · Swift Package Manager ·
Info.plist中的NSCameraUsageDescription - Android: minSdk 24 · 最新的 Android 系统 WebView(建议使用 Chrome/WebView ≥ 100)
- React Native: RN ≥ 0.72 ·
react-native-webview≥ 13.6 - 运行时需要互联网访问
https://iapp.co.th/sdk/webview.html