跳转到主要内容
一个跨平台的 React Native SDK,封装了原生 iOS 和 Android SDK,并提供统一的 TypeScript API 用于身份验证。

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,设置 diditSdkAndroidNfcEnabled Gradle 属性,并应用 BouncyCastle 依赖与打包规则
  • iOS: 将 DiditSDK podspec 添加到 Podfile 中(启用 NFC 时固定为 iOS 15)
该插件不会修改 Info.plist。请添加 iOS 权限键,如需 NFC,还要在同一文件的 ios.infoPlist 下添加 ISO7816 选择标识符。D392F000260100000001 可让 SDK 通过 JPKI 读取日本 My Number Card:

禁用 NFC 依赖项

如需在不支持 NFC 的情况下构建(二进制文件更小,且无需 NFC 能力),请传入插件选项:
禁用 NFC 时,您无需配置 iOS NFC 能力、NFC 权限配置(entitlements),也无需进行与 NFC 相关的描述文件(provisioning)设置。
此 SDK 使用的原生模块(相机、NFC)在 Expo Go 中不可用。您必须使用开发构建,或运行 npx expo prebuild 以生成原生项目。

React Native CLI

iOS 设置

将 DiditSDK pod 添加到您的 Podfile 中(它不在 CocoaPods trunk 上)。下面的代码块会读取 DIDIT_SDK_IOS_NFC_ENABLED 环境变量,以便您在安装时切换是否使用不含 NFC 的子规格(DiditSDK/Core):
podspec URL 中的标签必须与已安装包版本中的 diditNativeSdkVersions.ios 一致。React Native 4.13.2 固定了原生 iOS 4.13.2 和原生 Android 4.13.2。请勿将 podspec 指向 main:该包依赖于这个确切的原生 iOS 版本,因此一旦 main 向前推进,CocoaPods 就会看到 DiditSDK 的两个互不兼容的要求,每次 pod install 都会失败。Expo 配置插件会为您推导此 URL;只有不使用 Expo 的 React Native CLI 方式才需要手动写出。
然后安装依赖项:
如需在不含 NFC 依赖的情况下重新构建,请清理 CocoaPods,并在设置环境变量后重新运行:

Android 设置

将 Didit Maven 仓库添加到项目级 settings.gradle 中:
在应用的 android/app/build.gradle 中(位于 android { ... } 代码块内)添加以下内容,以解决 BouncyCastle 重复类冲突,以及 DiditSDK 传递依赖可能引发的 OSGI MANIFEST.MF 重复问题:
如需在不含 Android NFC 依赖的情况下构建(使用 me.didit:didit-sdk-core 构件,而非 me.didit:didit-sdk),请将以下内容添加到 android/gradle.properties 中:
删除该属性,或将其设置为 true,即可使用包含 NFC 的完整 Android SDK。

权限

iOS

将以下键添加到应用的 Info.plist 中。缺少必需的 iOS 隐私键会导致 iOS 在 SDK 访问受保护资源时立即终止应用。

NFC 配置

要启用对带芯片的护照和身份证的 NFC 读取:
  1. 在 Xcode 中添加 NFC 功能:
    • 选择你的 Target > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
  2. 将 ISO7816 标识符添加到 Info.plist:
D392F000260100000001 使 SDK 能够通过 JPKI 读取日本 My Number Card:若没有它,iOS 不会将该卡报告给 SDK。My Number Card 读取功能尚未在生产环境中启用,且该标识符对其他证件没有任何影响,因此你现在即可添加。
  1. 添加一个启用 NFC 标签读取的授权文件:
请确保应用的描述文件包含 NFC Tag Reading 功能。禁用 NFC 时无需此 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 发送到您的后端,切勿仅依赖客户端的结果。

1. 后端:创建会话

2. React Native:交换令牌并启动 SDK

3. 后端:通过 Webhook 接收最终决策

有关 HMAC 签名验证的详细信息,请参阅 Webhooks 指南。

完整示例


最后修改于 2026年11月7日