本地反应的 DiditSDK
用于 Didit 身份验证 SDK 的回放原生包装. 支持iOS和Android同时使用在React Industrial's New Architecture(Turbo Modules)上所构建的统一TypeScript API.
正在准备作为单独的
@didit-protocol/auth-react-native 软件包.
在本地的DiditAuth人融入之前,这是私人的,无法使用.
所需资源
- 反应原生 0.76+ (新建筑 / TurboModules)
- 节点.js 20+
- 类型脚本 5+
平台要求
| 平台 | 最小版本 | 页:1 |
|---|---|---|
| iOS系统 | 13.0+ (韩语) | NFC护照读取需要iOS 15.0+ |
| 机器人 | API 24+ (7.0) (中文(简体) ) | Kotlin 2.1.10+, Android Gradle插件 8.6.0+, Gradle 8.7+, JDK 17 |
权限
SDK只为位置验证步骤使用相机,可选为 NFC 和位置(参见 银行和地点核查步骤) (中文(简体) ). 原生许可由基础原生SDK宣布,并在平台支持的地方自动合并.
iOS系统
在您的应用程序中添加以下密钥 Info.plist数字 :
<key>NSCameraUsageDescription</key>
<string>Camera access is required to scan your identity documents for verification.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required to record video for liveness verification.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Photo library access is required to upload document images.</string>
<key>NFCReaderUsageDescription</key>
<string>NFC is used to read passport chip data for identity verification.</string>
缺少需要的iOS隐私密钥会让iOS在SDK访问保护资源后立即终止应用.
NFC 配置(用于读取护照/ID芯片)
-
添加 NFC 能力 在 Xcode 中:
- 选择目标 > 签名( C) > + 能力 > 接近外地通讯标记读取
-
添加 ISO7816 标识符 改为
Info.plist数字 :<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key> <array> <string>D23300000045737445494420763335</string> <string>A0000002471001</string> <string>A0000002472001</string> <string>00000000000000</string> </array> -
添加应享权利文件 启用 NFC 标签读取 :
<key>com.apple.developer.nfc.readersession.formats</key> <array> <string>TAG</string> </array>
确保应用程序的提供配置包括NFC标签阅读能力. NFC被禁用时不需要这种NFC配置.
机器人
以下权限在本地 SDK 中声明 AndroidManifest.xml 并自动合并 :
| 权限 | 说明 |
|---|---|
INTERNET | API 通信的网络访问 |
ACCESS_NETWORK_STATE | 检测网络可用性 |
CAMERA | 文件扫描和面相验证 |
NFC | 在护照/身份证上读取 NFC 芯片 |
相机和NFC硬件特性被宣布为可选(android:required="false"),因此你的应用程序可以安装在没有这些特性的设备上.
运行时间权限
SDK自动处理Android运行时权限请求. 当用户到达需要相机访问的一步时:
- SDK 提示, 如果尚未获得相机许可
- 如果用户 否认 中,使用“再次尝试”按钮显示错误消息
- 如果用户 赠款 权限, 核查流量继续
您在拨打前不需要在您的应用代码中请求相机许可 startVerification() - SDK内部管理这个.
银行和地点核查步骤
工作流量可包括: 银行 步骤(个人链接银行账户)和a 地点 步骤(设备位置读取一次,并征得个人同意)。 两个屏幕都由本地的 SDK 绘制, 所以这个软件包不需要新的 API: 它们运行在内部 startVerification() 编号 : startVerificationWithWorkflow(),结果还是一样 VerificationResult。 。 。 .
银行
没有设置。 本地SDK在系统浏览器中打开了银行的页面(或一页Didit主机),因此没有权限,URL计划或深层链接来注册.
IOS 上的位置
船舶在本地SDK中的位置完整 位置变体,而不是作为附加: Core-Location, (中文(简体) ), NFC-Location 财务报告和审定财务报表 All-Location 对于可可花, DiditSDKCoreLocation, (中文(简体) ), DiditSDKNFCLocation 财务报告和审定财务报表 DiditSDKLocation (所有与位置) SwiftPM。 完全可以宣布一个 DiditSDK 变体,所以这个包从您的变体中选择给你: all 地图到 All-Location, (中文(简体) ), core 财务报告和审定财务报表 autodetection 地图到 Core-Location, (中文(简体) ), nfc 地图到 NFC-Location。 。 。 .
设定 $DiditSdkIosLocationEnabled = true 在此之前 use_native_modules! (或 DIDIT_SDK_IOS_LOCATION_ENABLED=true)并保留一个单曲 pod didit_sdk_subspec 线条显示于 反应原生 CLI与位置映射。 使用 SwiftPM 链接时, 同一旗子会选择位置产品, 并且不需要主干线 。 展览用户设置 iosLocationEnabled: true 在此套件的插件选项中运行预建。 不启用位置, 或不启用 NSLocationWhenInUseUsageDescription,该步骤没有显示即时性,报告设备不能放置人物,工作流程自己的规则决定.
添加目的字符串到 Info.plist。 。 。 . NSLocationTemporaryUsageDescriptionDictionary 是可选的:它允许步骤在只授予一个近似位置(iOS 14+)时要求精确位置一次,其密钥必须是准确的 DiditLocationVerification。 。 。 .
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to confirm where you are for this verification.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>DiditLocationVerification</key>
<string>This verification needs your precise location once.</string>
</dict>
iOS通过设备语言来选择这些字符串,而不是SDK的 languageCode,所以翻译在每一个中 <lang>.lproj/InfoPlist.strings。精确位置字符串在其目的键下翻译。 举个例子 es.lproj/InfoPlist.strings数字 :
"NSLocationWhenInUseUsageDescription" = "Tu ubicación se usa para confirmar dónde estás en esta verificación.";
"DiditLocationVerification" = "Esta verificación necesita tu ubicación precisa una vez.";
将相同的密钥设置在 Expo 中 app.json 并翻译为: locales数字 :
{
"expo": {
"plugins": [
["@didit-protocol/sdk-react-native", { "iosLocationEnabled": true }]
],
"ios": {
"infoPlist": {
"NSLocationWhenInUseUsageDescription": "Your location is used to confirm where you are for this verification.",
"NSLocationTemporaryUsageDescriptionDictionary": {
"DiditLocationVerification": "This verification needs your precise location once."
}
}
},
"locales": {
"es": "./locales/es.json"
}
}
}
地点 locales/es.json 为:
{
"ios": {
"NSLocationWhenInUseUsageDescription": "Tu ubicación se usa para confirmar dónde estás en esta verificación.",
"DiditLocationVerification": "Esta verificación necesita tu ubicación precisa una vez."
}
}
此寄存器中的两个示例应用程序都用英语和西班牙语声明这些字符串.
一旦您的应用程序链接模块, 请声明 准确位置 财务报告和审定财务报表 粗细位置 在 App Store 连接中 App 函数,链接到用户而不用于跟踪。 SDK每次尝试读取一个位置,只在台阶被屏幕显示时,才从背景中读取.
Android 上的位置( 地址 )
本地 SDK 声明 ACCESS_FINE_LOCATION 财务报告和审定财务报表 ACCESS_COARSE_LOCATION,加上位置硬件特性作为可选性(android:required="false"),它们自动地合并到您的应用中. 只有在一个工作流程到达台阶时,经过一个解释原因的屏幕之后,才能在运行时间提出这些要求,而且此人可以给出准确或大致的位置。 如果你的应用程序从未运行该步骤,你可以把它们从合并清单中删除 <manifest> 要素需求 xmlns:tools="http://schemas.android.com/tools":
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />
仍然达到该步骤的会话,然后报告该位置不可用,而不迅速。 如果你留着,就宣布 大约位置 财务报告和审定财务报表 准确位置 在您的 Google 游戏数据安全表中收集的数据.
原生 SDK 变体
NFC默认在两个平台上启用. 每个变体都有自动抓取功能.
React Natural插件可以安装被iOS和Android SDK所曝光的同一种原生SDK变体:
| 备选案文 | NFC 护照读取 | 使用时间 |
|---|---|---|
all | 对 | 您想要完整的 SDK( 默认) |
core | 没有 | 您不需要 NFC 护照读取 |
nfc | 对 | 你想要NFC变体 |
autodetection | 没有 | 折旧:与 core |
当NFC被禁用时,你不需要iOS NFC能力,NFC应享权利,Android NFC包装规则,或NFC相关的提供设置.
安装
博览
npx expo install @didit-protocol/sdk-react-native
然后将配置插件添加到您的 app.json (或 app.config.js) (中文(简体) ). 默认的本地变体是 all数字 :
{
"expo": {
"plugins": ["@didit-protocol/sdk-react-native"]
}
}
要选择较小的本地变体 :
{
"expo": {
"plugins": [
[
"@didit-protocol/sdk-react-native",
{
"iosVariant": "core",
"androidVariant": "core"
}
]
]
}
}
就是这样。 插件自动配置两个平台 :
- 机器人: 将 Didit Maven 寄存器添加到 Gradle 并写入
diditSdkAndroidVariant - iOS: (英语) 将 DiditSDK 的 podspec 添加到 Pod 文件并设定
$DiditSdkIosVariant
支助 iosVariant 编号 : androidVariant 值为 all, (中文(简体) ), core, (中文(简体) ), autodetection,以及 nfc遗产布林斯iosNfcEnabled, (中文(简体) ), iosAutoDetectionEnabled, (中文(简体) ), androidNfcEnabled仍然工作,不过 iosVariant 编号 : androidVariant 倾向于采用新的整合.
过 "iosLinkage": "spm" 要通过 Swift 软件包管理器而不是 CocoaPods 解决本地 iOS SDK - 此插件会写出否 pod 'DiditSDK' 线条。 见 Swift 软件包管理器 提醒你一下,我说... 默认是 cocoapods。 。 。 .
IOS postspec URL 来源于本软件包的 SDK 版本 (diditNativeSdkVersions.ios 联合国 package.json因此,它总是匹配 DiditSDK 版本的 post spec 取决于 。 用叉子、镜子或预先释放标记指向可可花,通过 iosPodspecUrl数字 :
[
"@didit-protocol/sdk-react-native",
{
"iosPodspecUrl": "https://raw.githubusercontent.com/didit-protocol/sdk-ios/4.14.7/DiditSDK.podspec"
}
]
说明: 此 SDK 使用 Expo Go 不可用的本地模块(相机, NFC). 你必须用一个 发展 运行
npx expo prebuild开发本地项目.
反应原生 CLI
npm install @didit-protocol/sdk-react-native
# or
yarn add @didit-protocol/sdk-react-native
iOS系统
将 DiditSDK 显示器添加到您的 Podfile (不在可可花树干上) 默认的本地变体是 all数字 :
# Pick one: 'all', 'core', 'nfc' ('autodetection' is deprecated and identical to 'core')
$DiditSdkIosVariant = 'all'
def max_ios_version(*versions)
versions.map(&:to_s).max_by { |version| Gem::Version.new(version) }
end
didit_sdk_ios_deployment_target = ['all', 'nfc'].include?($DiditSdkIosVariant) ? max_ios_version(min_ios_version_supported, '15.0') : min_ios_version_supported
platform :ios, didit_sdk_ios_deployment_target
# Inside your app target:
# Location ships as complete variants (All-Location, Core-Location, NFC-Location)
$DiditSdkIosLocationEnabled = false # true to enable the Location step
didit_sdk_location_suffix = $DiditSdkIosLocationEnabled ? '-Location' : ''
didit_sdk_subspec = case $DiditSdkIosVariant
when 'all' then "DiditSDK/All#{didit_sdk_location_suffix}"
when 'core', 'autodetection' then "DiditSDK/Core#{didit_sdk_location_suffix}"
when 'nfc' then "DiditSDK/NFC#{didit_sdk_location_suffix}"
else
raise "Invalid $DiditSdkIosVariant '#{$DiditSdkIosVariant}'. Supported values: all, core, autodetection, nfc."
end
pod didit_sdk_subspec, :podspec => 'https://raw.githubusercontent.com/didit-protocol/sdk-ios/4.14.7/DiditSDK.podspec'
Swift 软件包管理器( 可选)
在本地 0.75+ 中, 您可以跳过 pod 并让 SwiftPM 直接从 sdk-ios 复发. 设定链接, 而不是声明主机 :
# Pick one: 'all', 'core', 'autodetection', 'nfc'
$DiditSdkIosVariant = 'all'
$DiditSdkIosLinkage = 'spm'
def max_ios_version(*versions)
versions.map(&:to_s).max_by { |version| Gem::Version.new(version) }
end
didit_sdk_ios_deployment_target = ['all', 'nfc'].include?($DiditSdkIosVariant) ? max_ios_version(min_ios_version_supported, '15.0') : min_ios_version_supported
platform :ios, didit_sdk_ios_deployment_target
# No `pod 'DiditSDK'` line needed - SdkReactNative.podspec declares it as a
# SwiftPM dependency on the matching sdk-ios tag.
DIDIT_SDK_IOS_LINKAGE=spm 也行,博览会用户可以通过 "iosLinkage": "spm" 到配置插件. cocoapods 仍然是默认.
如果您将已有工程切换到 spm, (中文(简体) ), 删除 pod didit_sdk_subspec, :podspec => ... 线条 - 将两个框架连接两次。 React Industrial警告说,SwiftPM包与静态连接的吊舱结合,可以产生链接器出错;如果击中这些,则用 USE_FRAMEWORKS=dynamic (单位:千美元)细节) (中文(简体) ).
然后安装依赖性 :
cd ios
bundle exec pod install
要切换变体, 干净的可可Pods 首先, 所以前一个变体不重复使用 :
cd ios
rm -rf Pods Podfile.lock
# Edit $DiditSdkIosVariant in your Podfile, then:
bundle exec pod install
机器人
添加 Didit Maven 寄存器到您的工程级别 settings.gradle数字 :
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {
url "https://raw.githubusercontent.com/didit-protocol/sdk-android/main/repository"
// Scope to Didit's group: unfiltered, Gradle probes this host for
// every dependency and a 429 disables the repo mid-build (issue #40).
content { includeGroup "me.didit" }
}
maven { url "https://jitpack.io" }
}
}
默认情况下, React 本地插件依赖于完整的Android SDK(all) (中文(简体) ). 要选择另一个变体,请添加到 android/gradle.properties数字 :
diditSdkAndroidVariant=core
支持的值为 all, (中文(简体) ), core, (中文(简体) ), autodetection,以及 nfc遗产 diditSdkAndroidNfcEnabled=false 属性仍然映射到 core 用于后向兼容,但 diditSdkAndroidVariant 选择新的整合.
两个平台的原生SDK依赖性在库中宣告并自动解决.
快速启动
选项A:以会话符号开始校验
如果您的后端创建了校验会话并返回一个符号:
import { startVerification, VerificationStatus } from '@didit-protocol/sdk-react-native';
const result = await startVerification('your-session-token');
switch (result.type) {
case 'completed':
console.log('Status:', result.session.status);
console.log('Session ID:', result.session.sessionId);
break;
case 'cancelled':
console.log('User cancelled');
break;
case 'failed':
console.log('Error:', result.error.type, result.error.message);
break;
}
备选案文B:以工作流程ID开始核查
如果您想要 SDK 使用工作流程ID创建会话 :
import { startVerificationWithWorkflow } from '@didit-protocol/sdk-react-native';
const result = await startVerificationWithWorkflow('your-workflow-id', {
vendorData: 'user-123',
config: { loggingEnabled: true },
});
配置
两者 startVerification 财务报告和审定财务报表 startVerificationWithWorkflow 接受一个 DiditConfig 对象自定义 SDK 行为。 对于 startVerification,通过它作为第二个论点。 对于 startVerificationWithWorkflow传入里面 options.config 字段.
import { startVerification } from '@didit-protocol/sdk-react-native';
// With startVerification — config is the second argument
const result = await startVerification('your-session-token', {
languageCode: 'es',
showLanguageSelector: true,
fontFamily: 'Avenir',
loggingEnabled: true,
showCloseButton: true,
showExitConfirmation: true,
closeOnComplete: false,
});
// With startVerificationWithWorkflow — config is inside options
const result = await startVerificationWithWorkflow('your-workflow-id', {
vendorData: 'user-123',
config: {
languageCode: 'es',
showLanguageSelector: true,
loggingEnabled: true,
showCloseButton: true,
showExitConfirmation: true,
},
});
配置选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
languageCode | string | 设备定位 | ISO 639-1语言代码(例如. "en", (中文(简体) ), "fr", (中文(简体) ), "ar"(中文(简体) ) |
showLanguageSelector | boolean | false | 在欢迎屏幕上显示网络风格的语言选择器 |
fontFamily | string | 系统字体 | 自定义字体姓氏 |
loggingEnabled | boolean | false | 启用 SDK 调试记录 |
showCloseButton | boolean | true | 在校验步骤屏幕上显示关闭( X) 按钮 |
showExitConfirmation | boolean | true | 用户试图退出时显示确认对话框 |
closeOnComplete | boolean | false | 完成时自动解除校验 |
defaultDocumentCamera | CameraLens | 本地默认( N)back(中文(简体) ) | 第一次进入文档抓取屏幕时使用的镜头 |
defaultLivenessCamera | CameraLens | 本地默认( N)front(中文(简体) ) | 第一次进入活性(被动面)抓取屏幕时使用的镜头 |
showDocumentCameraSwitchButton | boolean | true | 在文档屏幕上显示抓取相机切换器 |
showLivenessCameraSwitchButton | boolean | true | 在活性屏幕上显示抓取相机切换器 |
所有字段都是可选的. 如果不提供配置, SDK 会使用合理的默认值 .
languageCode
设置整个验证 UI 的语言。 通过一个ISO 639-1代码(例如. "en", (中文(简体) ), "fr", (中文(简体) ), "es", (中文(简体) ), "ar") (中文(简体) ). 如果不设定,SDK会自动检测设备的地盘并倒回英语.
// Force French
await startVerification(token, { languageCode: 'fr' });
// Use device locale (default — no config needed)
await startVerification(token);
showLanguageSelector
设定为 true 来让用户从欢迎屏幕中更改校验语言。 选择器默认隐藏 .
await startVerification(token, { showLanguageSelector: true });
fontFamily
覆盖整个SDK UI所使用的字体. 该字体必须在您的应用程序的本地配置中注册 :
- iOS: (英语) 将字体文件添加到您的 Xcode 工程中并列出其中
Info.plist下级UIAppFonts。 。 。 . - 机器人: 将字体文件放入
android/app/src/main/res/font/。 。 。 .
await startVerification(token, { fontFamily: 'Avenir' });
如果不设定,SDK会使用平台的默认系统字体.
loggingEnabled
启用本地 SDK 调试日志 。 开发期间用于检查SDK的内部状态,API调用,以及出错细节. 应在生产中被禁用.
// Enable logging for debugging
await startVerification(token, { loggingEnabled: true });
相机设置
控制文档默认打开的相机镜头和活性捕捉屏幕,以及是否向用户显示摄入相机切换器.
import { CameraLens, startVerification } from '@didit-protocol/sdk-react-native';
await startVerification(token, {
defaultDocumentCamera: CameraLens.Back, // back is the native default
defaultLivenessCamera: CameraLens.Front, // front is the native default
showDocumentCameraSwitchButton: true, // false to lock to the chosen lens
showLivenessCameraSwitchButton: true,
});
如果设备上没有所请求的镜头,则原生的SDK会倒回第一台可用的相机,因此捕获仍然有效. 切换器也自动隐藏在单相机设备上,而不论 show…SwitchButton 旗帜.
语言设置
SDK支持54种语言. 如果没有指定语言,SDK则使用有英语的器件locale作为倒置.
// Use device locale (default)
await startVerification(token);
// Force a specific language
await startVerification(token, { languageCode: 'fr' });
支持的语言
| 语言 | 代码 | 语言 | 代码 |
|---|---|---|---|
| 阿尔巴尼亚语Name | sq | 哈萨克语Name | kk |
| 阿拉伯语 | ar | 韩文 | ko |
| 亚美尼亚语Name | hy | 吉尔吉斯 | ky |
| 孟加拉语 | bn | 拉脱维亚语Name | lv |
| 波斯尼亚语 | bs | 立陶宛语Name | lt |
| 保加利亚语Name | bg | 马其顿 | mk |
| 加泰罗尼亚语Name | ca | 马来语Name | ms |
| 中文 | zh | 黑山 | cnr |
| 汉语 (简化) | zh-CN | 挪威语 | no |
| 中文( 传统) | zh-TW | 波斯语Name | fa |
| 克罗地亚 | hr | 波兰语Name | pl |
| 捷克语 | cs | 葡萄牙语 | pt |
| 丹麦语Name | da | 葡萄牙语( 巴西) | pt-BR |
| 荷兰语Name | nl | 罗马尼亚语Name | ro |
| 联合国 | en | 俄语 | ru |
| 爱沙尼亚语 | et | 塞尔维亚语 | sr |
| 芬兰语 | fi | 斯洛伐克语 | sk |
| 法语 | fr | 斯洛文尼亚语Name | sl |
| 格鲁吉亚语Name | ka | 索马里 | so |
| 德语 | de | 西班牙语 | es |
| 希腊语Name | el | 瑞典语 | sv |
| 希伯来语Name | he | 泰国语Name | th |
| 印地语 | hi | 土耳其语Name | tr |
| 匈牙利语Name | hu | 乌克兰语Name | uk |
| 印度尼西亚语Name | id | 乌兹别克斯坦语Name | uz |
| 意大利语 | it | 越南语Name | vi |
| 日本语 | ja | 蒙古语 | mn |
高级会话参数
对于高级会话参数,例如: contact_details, (中文(简体) ), expected_details, (中文(简体) ), metadata,以及 callback,使用 后端会话 方法。 你的后端电话 POST /v3/会话/会话 然后通过 session_token 给SDK:
// Your backend creates the session with advanced parameters:
// POST /v3/session/ with contact_details, expected_details, metadata, etc.
// Then passes the session_token to the SDK:
const result = await startVerification(sessionTokenFromBackend);
说明: 这个
startVerificationWithWorkflow仅支持方法vendorData。对于任何其他会话参数,请使用后端会话方法.
完整工作流程示例
const result = await startVerificationWithWorkflow('your-workflow-id', {
vendorData: 'user-123',
config: {
languageCode: 'en',
loggingEnabled: true,
showCloseButton: true,
showExitConfirmation: true,
},
});
核查结果
两者 startVerification 财务报告和审定财务报表 startVerificationWithWorkflow 返回 a Promise<VerificationResult>其结果是存在歧视的工会——使用 type 字段来决定结果.
结果类型
| 类型 | 说明 | 字段 |
|---|---|---|
completed | 核查流程完成 | session (永远存在) |
cancelled | 用户取消了流量 | session (可选) |
failed | 发生了错误 | error (总是在), session (可选) |
会话数据
| 财产 | 类型 | 说明 |
|---|---|---|
sessionId | string | 唯一会话标识符 |
status | VerificationStatus | Approved, (中文(简体) ), Pending,或 Declined |
校验错误
| 财产 | 类型 | 说明 |
|---|---|---|
type | VerificationErrorType | 错误类别(见下表) |
message | string | 可读错误描述 |
错误类型
| 错误类型 | 说明 |
|---|---|
sessionExpired | 会话已过期 |
networkError | 网络连接问题 |
cameraAccessDenied | 未获得相机许可 |
notInitialized | SDK 未初始化( 只有Android) |
apiError | API 请求失败 |
retryBlocked | 先前的核查未获核准并达到最高复试次数 |
unknown | 信件中的其他错误 |
处理结果
import {
startVerification,
VerificationStatus,
type VerificationResult,
} from '@didit-protocol/sdk-react-native';
async function verify(token: string) {
const result: VerificationResult = await startVerification(token);
switch (result.type) {
case 'completed':
switch (result.session.status) {
case VerificationStatus.Approved:
console.log('Identity verified!');
break;
case VerificationStatus.Pending:
console.log('Verification under review.');
break;
case VerificationStatus.Declined:
console.log('Verification declined.');
break;
}
console.log('Session ID:', result.session.sessionId);
break;
case 'cancelled':
console.log('User cancelled the verification.');
if (result.session) {
console.log('Session ID:', result.session.sessionId);
}
break;
case 'failed':
console.log(`Error [${result.error.type}]: ${result.error.message}`);
break;
}
}
完整示例
import { useState, useCallback } from 'react';
import {
Text,
View,
TextInput,
TouchableOpacity,
Alert,
ActivityIndicator,
SafeAreaView,
} from 'react-native';
import {
startVerification,
startVerificationWithWorkflow,
VerificationStatus,
type VerificationResult,
} from '@didit-protocol/sdk-react-native';
export default function App() {
const [token, setToken] = useState('');
const [loading, setLoading] = useState(false);
const handleVerify = useCallback(async () => {
if (!token.trim()) {
Alert.alert('Error', 'Please enter a session token.');
return;
}
setLoading(true);
try {
const result = await startVerification(token.trim(), {
loggingEnabled: true,
});
showResult(result);
} catch (error) {
Alert.alert('Error', `Unexpected error: ${error}`);
} finally {
setLoading(false);
}
}, [token]);
const showResult = (result: VerificationResult) => {
switch (result.type) {
case 'completed':
Alert.alert(
'Verification Complete',
`Status: ${result.session.status}\nSession: ${result.session.sessionId}`
);
break;
case 'cancelled':
Alert.alert('Cancelled', 'The user cancelled the verification.');
break;
case 'failed':
Alert.alert('Failed', `${result.error.type}: ${result.error.message}`);
break;
}
};
return (
<SafeAreaView style={{ flex: 1, padding: 24, justifyContent: 'center' }}>
<TextInput
placeholder="Enter session token..."
value={token}
onChangeText={setToken}
autoCapitalize="none"
style={{
borderWidth: 1,
borderColor: '#ccc',
borderRadius: 8,
padding: 12,
marginBottom: 16,
}}
/>
<TouchableOpacity
onPress={handleVerify}
disabled={loading}
style={{
backgroundColor: '#1a1a1a',
borderRadius: 8,
padding: 16,
alignItems: 'center',
}}
>
{loading ? (
<ActivityIndicator color="#fff" />
) : (
<Text style={{ color: '#fff', fontWeight: '600' }}>
Start Verification
</Text>
)}
</TouchableOpacity>
</SafeAreaView>
);
}
API 参考
startVerification(token, config?)
以现有的会话符号开始校验 .
| 参数 | 类型 | 需求 | 说明 |
|---|---|---|---|
token | string | 对 | 来自 Didit API 的会话令牌 |
config | DiditConfig | 没有 | SDK 配置选项 |
回返情况: Promise<VerificationResult>
startVerificationWithWorkflow(workflowId, options?)
通过创建一个带有工作流程ID的新会话开始校验.
| 参数 | 类型 | 需求 | 说明 |
|---|---|---|---|
workflowId | string | 对 | 定义验证步骤的工作流程 ID |
options | WorkflowOptions | 没有 | 工作流程备选方案(见下文) |
回返情况: Promise<VerificationResult>
工作流程选项
| 外地 | 类型 | 说明 |
|---|---|---|
vendorData | string | 您的用户标识符或引用 |
config | DiditConfig | SDK 配置选项 |
说明: 高级会话参数(
contactDetails, (中文(简体) ),expectedDetails, (中文(简体) ),metadata),使用后端会话方法(startVerification通过 POST /v3/ session/ 创建一个令牌.
submitTransaction(transactionToken, transaction, options?)
从设备直接提交交易 。 需要由您的后端通过 : POST /v3/transactions/sdk-token/。设备智能自动附加. autoLaunchAction (默认) true(a) 自动发射 wallet_ownership 本土行动,援引 options.onTransactionUpdated 完成后; a verification_session 动作从不自动发射,总是返回 result.actionRequired 您的应用程序将启动自己的 Didit 验证集成。 全向导 : SDK 交易提交。 。 。 .
| 参数 | 类型 | 需求 | 说明 |
|---|---|---|---|
transactionToken | string | 对 | 交易 SDK 令牌( 同意为 X-Transaction-Token(中文(简体) ) |
transaction | DiditTransaction | 对 | 交易有效载荷txnId 需要; info, (中文(简体) ), subject, (中文(简体) ), counterparty, (中文(简体) ), travelRule, (...) (中文(简体) ) |
options | DiditTransactionOptions | 没有 | baseUrl, (中文(简体) ), autoLaunchAction (默认) true, (中文(简体) ), onTransactionUpdated 回调 |
回返情况: Promise<DiditTransactionResult> 与 transactionId, (中文(简体) ), status, (中文(简体) ), travelRuleStatus?,以及 actionRequired?。 。 。 .
掷出 : DiditTransactionError 与 code 设置为 invalid_token, (中文(简体) ), expired_token, (中文(简体) ), validation (见 fieldErrors),或 network。 。 。 .
import { submitTransaction, DiditTransactionError } from '@didit-protocol/sdk-react-native';
try {
const result = await submitTransaction(sdkToken, {
txnId: 'order-123',
type: 'crypto',
info: { direction: 'outbound', amount: 0.25, currency: 'ETH' },
travelRule: { required: true },
}, {
onTransactionUpdated: (updated) => console.log('Refreshed:', updated.status),
});
console.log(result.transactionId, result.actionRequired?.type);
} catch (error) {
if (error instanceof DiditTransactionError) {
console.log(error.code, error.fieldErrors);
}
}
A 类 verification_session 动作返回,而不是自动发射 - 自行发射 startVerification数字 :
import { submitTransaction, startVerification } from '@didit-protocol/sdk-react-native';
const result = await submitTransaction(sdkToken, transaction);
if (result.actionRequired?.type === 'verification_session') {
const { sessionToken } = result.actionRequired;
const verification = await startVerification(sessionToken!);
console.log('Verification result:', verification.type);
}
getTransaction(transactionToken, transactionId, options?)
获取先前以相同符号提交的交易的当前状态 .
| 参数 | 类型 | 需求 | 说明 |
|---|---|---|---|
transactionToken | string | 对 | 交易 SDK 令牌 |
transactionId | string | 对 | transactionId 返回时间 submitTransaction |
options | DiditTransactionOptions | 没有 | baseUrl 覆盖 |
回返情况: Promise<DiditTransactionResult>
导出类型
import {
// Functions
startVerification,
startVerificationWithWorkflow,
submitTransaction,
getTransaction,
// Enum
VerificationStatus,
// Classes
DiditTransactionError,
// Types
type VerificationResult,
type VerificationCompleted,
type VerificationCancelled,
type VerificationFailed,
type VerificationError,
type VerificationErrorType,
type SessionData,
type DiditConfig,
type ContactDetails,
type ExpectedDetails,
type WorkflowOptions,
type DiditTransaction,
type DiditTransactionInfo,
type DiditTransactionParticipant,
type DiditTransactionPaymentMethod,
type DiditTravelRule,
type DiditTransactionActionRequired,
type DiditTransactionResult,
type DiditTransactionOptions,
type DiditTransactionErrorCode,
} from '@didit-protocol/sdk-react-native';
运行示例应用程序
该寄存器包括一个功能完备的示例应用.
iOS系统
yarn install
cd example/ios && bundle exec pod install && cd ../..
yarn run:ios
要运行在真正的设备上,打开 example/ios/SdkReactNativeExample.xcworkspace 在 Xcode 中,配置您的签名团队,并选择您的设备.
机器人
yarn install
yarn run:android
许可证
版权 (c) 2026 Didit. 版权所有.