GitHub 仓库
在 GitHub 上查看源代码和示例
npm 包
@didit-protocol/sdk-react-native
原生 SDK: 这是 React Native 和 Expo 应用推荐的集成方式。该 SDK 封装了原生 iOS 和 Android SDK,可提供最佳用户体验、经过优化的相机处理,并完整支持 NFC。
环境要求
平台要求
生物识别同意需要原生 4.10.0 或更高版本。 对于受 Illinois、Texas 或 Colorado 州法律覆盖的用户,Didit 可以在首次人脸采集之前请求明确的生物识别同意。固定使用原生 iOS 和 Android 4.10.0 或更高版本的 React Native SDK 版本会显示该步骤。较早的版本无法显示该步骤:其会话照常运行,但决策结果会将同意报告为未收集(
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK")。如果您在这些州验证用户,请升级。安装
Expo (推荐)
app.json(或 app.config.js)中。默认启用 NFC:
- Android: 将 Didit Maven 仓库添加到 Gradle,设置
diditSdkAndroidNfcEnabledGradle 属性,并应用 BouncyCastle 依赖与打包规则 - iOS: 将 DiditSDK podspec 添加到 Podfile 中(启用 NFC 时固定为 iOS 15)
Info.plist。请添加 iOS 权限键,如需 NFC,还要在同一文件的 ios.infoPlist 下添加 ISO7816 选择标识符。D392F000260100000001 可让 SDK 通过 JPKI 读取日本 My Number Card:
禁用 NFC 依赖项
如需在不支持 NFC 的情况下构建(二进制文件更小,且无需 NFC 能力),请传入插件选项:React Native CLI
iOS 设置
将 DiditSDK pod 添加到您的Podfile 中(它不在 CocoaPods trunk 上)。下面的代码块会读取 DIDIT_SDK_IOS_NFC_ENABLED 环境变量,以便您在安装时切换是否使用不含 NFC 的子规格(DiditSDK/Core):
Android 设置
将 Didit Maven 仓库添加到项目级settings.gradle 中:
android/app/build.gradle 中(位于 android { ... } 代码块内)添加以下内容,以解决 BouncyCastle 重复类冲突,以及 DiditSDK 传递依赖可能引发的 OSGI MANIFEST.MF 重复问题:
me.didit:didit-sdk-core 构件,而非 me.didit:didit-sdk),请将以下内容添加到 android/gradle.properties 中:
true,即可使用包含 NFC 的完整 Android SDK。
权限
iOS
将以下键添加到应用的Info.plist 中。缺少必需的 iOS 隐私键会导致 iOS 在 SDK 访问受保护资源时立即终止应用。
NFC 配置
要启用对带芯片的护照和身份证的 NFC 读取:-
在 Xcode 中添加 NFC 功能:
- 选择你的 Target > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
-
将 ISO7816 标识符添加到
Info.plist:
D392F000260100000001 使 SDK 能够通过 JPKI 读取日本 My Number Card:若没有它,iOS 不会将该卡报告给 SDK。My Number Card 读取功能尚未在生产环境中启用,且该标识符对其他证件没有任何影响,因此你现在即可添加。
- 添加一个启用 NFC 标签读取的授权文件:
Android
以下权限在 SDK 的AndroidManifest.xml 中声明,并会自动合并:
相机和 NFC 硬件功能被声明为可选(
android:required="false"),因此你的应用可以安装在不具备这些功能的设备上。
快速开始
集成方式
SDK 支持两种集成方式:方式 1: 会话 token (推荐用于生产环境)
使用创建验证会话 API在你的后端创建会话,然后将 token 传递给 SDK:- 将会话与你的用户关联(
vendor_data) - 设置自定义元数据
- 按会话配置回调
方式 2: 工作流 ID (更简单的集成)
对于更简单的集成,SDK 可以直接使用你的工作流 ID 创建会话:配置
通过传递DiditConfig 对象来自定义 SDK 行为:
startVerificationWithWorkflow,请在 options.config 中传递配置:
配置选项
相机选项
相机选项与Web SDK 相机选项一致。 每个镜头为CameraLens.Front 或 CameraLens.Back。
如果设备没有所请求的镜头,SDK 将使用其第一个可用相机。
在仅有一个相机的设备上,相机切换按钮也会被隐藏。
将切换选项设为 false,可将用户锁定在该步骤的默认镜头上。
主题与颜色:颜色、背景和引导页设置通过 Didit Console 中的白标设置进行配置,而不是在 SDK 配置中设置。这可确保各平台的品牌形象保持一致。
语言支持
SDK 支持 54 种语言。如果未指定语言,SDK 将使用设备语言区域,并以英语作为后备。高级选项
这些选项仅可与startVerificationWithWorkflow 一起使用,此时由 SDK 代你创建会话。
联系方式 (预填与通知)
提供联系方式以预填充验证表单并启用邮件通知:预期用户信息 (交叉验证)
提供预期的用户信息,以便与提取的证件数据进行自动交叉验证:ExpectedDetails 的所有字段均为可选。完整类型定义请参见 src/types.ts。
自定义元数据
在会话中存储自定义 JSON 元数据(不向用户显示):处理结果
startVerification 和 startVerificationWithWorkflow 均返回 Promise<VerificationResult>。该结果是判别联合类型,请使用 type 字段判断验证结果。
结果类型
SessionData 属性
错误类型
连接中断
如果设备在验证过程中断开网络连接,SDK 会用“无网络连接”页面覆盖当前流程,而不会让某个步骤一直处于加载状态。 SDK 会在后台持续检测,一旦可以连通 Didit,便会自动关闭该页面,用户从中断时所在的步骤继续操作。 该页面提供 Try Again 按钮,若showCloseButton 为 true(默认值),还会显示 Exit Verification 按钮。
点击退出会以 failed 结果结束验证,错误为 networkError,这样您的应用就能知道用户是因网络连接问题而离开。
完整结果处理示例
端到端示例 (后端会话 → React Native SDK → Webhook)
这是可用于生产环境的集成方案:您的后端创建会话,您的 RN 应用接收session_token,SDK 运行验证流程。最终决策通过 Webhook 发送到您的后端,切勿仅依赖客户端的结果。