入门
iApp eKYC SDK 是免费开源(Apache-2.0)的 iApp eKYC API 客户端:它从摄像头拍摄泰国身份证、护照或官方证件,执行人脸活体检测与人脸验证,并替您调用 API;每次调用按与直接调用该 API 相同的价格计入您的 API 密钥。源代码:github.com/iapp-technology/iapp-ekyc-sdk。可先在浏览器中打开实时摄像头演示体验。
安装与首次拍摄
在 API 密钥管理 页面获取 API 密钥。Flutter 和 Web 在设备上运行采集引擎;iOS、Android 和 React Native 的原生封装运行同一引擎,运行时从 https://iapp.co.th/sdk/webview.html 加载,因此各平台拍摄效果一致,且应用需要联网。
- Flutter
- Web
- iOS
- Android
- React Native
- 需要 Flutter ≥ 3.32 和 Dart ≥ 3.8;Android
minSdk 24;iOS 15.5+,并在Info.plist中添加NSCameraUsageDescription(所需权限字符串见仓库中的flutter/example应用)。 - 在
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');
final front = await DocumentCaptureView.start(
context,
client: client,
documentType: DocumentType.thaiIdFront,
locale: EkycLocale.th,
);
- 使用支持 WebAssembly 和
getUserMedia的浏览器,并通过 HTTPS 或localhost访问;浏览器会在不安全的来源上阻止摄像头。 - 安装软件包。
- 创建客户端并拍摄泰国身份证正面。
locale可取'en'、'th'或'zh'。
npm install @iapp-technology/ekyc-sdk
import { IappEkyc } from '@iapp-technology/ekyc-sdk';
const ekyc = new IappEkyc({ apiKey: 'YOUR_API_KEY' });
const front = await ekyc.captureDocument({
mount: document.getElementById('ekyc-mount'),
documentType: 'thaiIdFront',
locale: 'th',
});
不使用打包工具时,加载 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>
采集引擎的资源仅在流程开始时加载。如果您的内容安全策略(CSP)禁止 CDN 请求,请自行托管这些资源并设置 assetBaseUrl 选项。
- 需要 iOS 15+,并在
Info.plist中添加NSCameraUsageDescription。 - 在 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:原生 SDK。
- 需要 minSdk 24 和最新的 Android System WebView(建议 Chrome/WebView ≥ 100)。
- 通过 JitPack 添加依赖。
- 注册 contract 并启动流程。
// 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:原生 SDK。
- 需要 React Native ≥ 0.72 和
react-native-webview≥ 13.6。 - 从克隆的仓库安装。
- 渲染流程。
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 用法:原生 SDK。
API 密钥
随应用发布的密钥可以被提取,例如反编译 APK 或使用浏览器开发者工具。生产环境中,请将 SDK 指向您自己的后端,并把 iApp 密钥保存在服务器端:
IappEkycClient(apiKey: '', baseUrl: 'https://your-backend.example.com/ekyc')
当 apiKey 为空时,SDK 不发送 apikey 请求头;由您的后端附加真实密钥并转发到 https://api.iapp.co.th。至少应为每个应用创建一个专用的受限密钥,以便单独吊销泄露的密钥。详情:SECURITY.md。
流程与价格
每个流程调用一个 API,按该 API 的价格计费。
- 身份证采集:检测卡片边界,等待清晰稳定的画面,校正透视后提交。正面 1.25 IC,背面 0.75 IC。
- 护照采集:同一引擎,针对护照资料页(MRZ)调优。0.75 IC。
- 官方证件采集:驾驶证、存折、带签名的身份证。每页 1.25 IC。
- 人脸主动活体检测:设备端随机挑战,选取最佳画面,返回服务器签名的判定结果。1 IC。
- 人脸验证:一次调用比对两张人脸图像。0.3 IC。
- 人脸被动活体检测:基于单张图像的防伪检测。0.3 IC。
主题与语言
所有平台默认使用浅蓝色主题,并可用相同的令牌名称覆盖;原生封装通过各自的配置对象传入令牌。界面文字提供英文、泰文和中文:Web 为 locale: 'th',Flutter 为 EkycLocale.th,iOS 为 config.locale = .th,Android 为 .locale(EkycLocale.TH),React Native 为 locale="th"。
- Flutter
- Web
EkycTheme 是一个普通的不可变类,不依赖 Theme.of:
const theme = EkycTheme.lightBlue; // 默认
final custom = EkycTheme.lightBlue.copyWith(
primary: Color(0xFF113F7B),
borderRadius: 12,
);
DocumentCaptureView.start(context, theme: custom, ...);
令牌作为 CSS 自定义属性设置在挂载元素上:
new IappEkyc({ apiKey, theme: { primary: '#113F7B', borderRadius: 12 } });
/* 或者使用纯 CSS 覆盖 */
#ekyc-mount { --iapp-ekyc-primary: #113f7b; --iapp-ekyc-border-radius: 12px; }
主题令牌与默认值
| 令牌 | 默认值 | 用途 |
|---|---|---|
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 | 平台默认 | 可选覆盖 |
更多:THEMING.md。