GitHub 代码仓库
在 GitHub 上查看源代码、版本发布和完整更新日志
原生 SDK: 这是 iOS 应用推荐的集成方式。原生 SDK 提供最佳的用户体验、经过优化的相机处理,并完整支持 NFC。
要求
iOS 版本兼容性
生物识别同意需要原生 SDK 4.10.0 或更高版本。 对于受伊利诺伊州、得克萨斯州或科罗拉多州法律约束的人员,Didit 可以在首次人脸采集前请求明确的生物识别同意。iOS SDK 4.10.0 及更高版本会显示该步骤。早期版本无法显示该步骤:其会话仍按原方式运行,决策结果会将同意报告为未收集(
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK")。如果您在这些州验证人员,请升级。安装
自4.0.0 起,SDK 提供多个可安装的变体,因此你的应用只需承担所用功能对应的二进制体积。请恰好选择一个变体,即一个 CocoaPods 子规范和一个 SwiftPM 库产品:
- Core:体积最小,通过 Didit 自有的轻量检测器自动完成证件和自拍照采集。不包含
OpenSSL.xcframework,也没有 CoreNFC 运行时。 - AutoDetection:自 4.11.0 起已弃用,与 Core 完全相同,请改用 Core。
- NFC:在 Core 的基础上增加 NFC 护照和电子身份证芯片读取。
- All:包含全部功能。安装
DiditSDK且未指定子规范或产品名时,默认使用此变体。
4.9.0 为基准测量):Core 约 11.1 MB,NFC 约 11.7 MB 加上约 4 MB 的 OpenSSL,AutoDetection 约 16.0 MB,All 约 16.6 MB 加上 OpenSSL。
检测模型本身在运行时下载并缓存,因此不计入应用的下载体积。
自 4.11.0 起,所有变体的自动采集都运行在 Didit 自有的轻量检测器上。TensorFlow Lite 不再是 SDK 的一部分,框架体积也因此变小,因为其翻译文件改为从二进制文件之外加载。
自 4.6.0 起,已发布的框架不再包含 Swift ABI 描述符(Xcode 会将其复制到每个应用中,但从不读取的构建元数据),也不再包含该变体无法播放的教程视频。从 4.5.4 或更早版本升级,仅此一项即可使应用缩小约 7-8 MB,无需修改代码。
App Store 在分发时会压缩二进制文件,因此空中下载的实际开销更低。每台设备的具体差异,请查看 App Store Connect 中的应用体积报告。
NFC 和 All 变体内置
OpenSSL.xcframework(OpenSSL 3.3.3,通过 NFCPassportReader 以 OpenSSL-Universal 3.3.3001 形式分发),它是 NFC 芯片认证所必需的,并且需要 iOS 15.0+。截至 4.0.6(含)的版本内置的是 OpenSSL 1.1.1s;4.0.7 及更高版本内置 OpenSSL 3.3.3,并附带自己的隐私清单和代码签名。请务必安装 4.0.7 或更高版本。注意,升级只能统一 OpenSSL 版本,无法消除 嵌入 冲突:如果你应用中的其他依赖也嵌入了 OpenSSL.framework(文件名相同,com.github.krzyzanowskim.OpenSSL Bundle ID 也相同),那么无论版本如何,两份副本都会在嵌入步骤中冲突。只保留一份:例如,按 SPM 标识覆盖另一个包,改用 Didit 发布的 OpenSSL.xcframework,以确保包内的二进制文件与本 SDK 构建时所用的一致。Core 和 AutoDetection 变体完全不链接任何 OpenSSL。import DiditSDK 都相同。
Swift Package Manager (推荐)
使用 Xcode 将该包添加到你的项目中:- 前往 File > Add Package Dependencies
- 输入代码仓库 URL:
- 选择版本(或从
4.13.2起选择 Up to Next Major),然后点击 Add Package - 出现选择产品的提示时,为你的变体恰好选择一个库产品(参见上方表格)
Package.swift 中添加:
CocoaPods
DiditSDK 以二进制 podspec 的形式托管在代码仓库中(它不在公共 CocoaPods Trunk 上),因此你必须引用 podspec 的 URL。请恰好选择一个子规范:
Core 和 AutoDetection 可部署到 iOS 13;NFC 和 All 因 NFCPassportReader 需要 iOS 15。
然后运行:
执行
pod install 后,请打开生成的 .xcworkspace(而不是 .xcodeproj)。Xcode 15+ rsync 错误:如果在构建时看到
Operation not permitted rsync 错误,请在项目的 Debug 和 Release 配置中,将 Build Settings → User Script Sandboxing(ENABLE_USER_SCRIPT_SANDBOXING)设置为 否。手动安装 (XCFramework)
每个版本为每个变体各发布一个 XCFramework。从 GitHub Releases 页面下载你所用变体的压缩包,然后将.xcframework 文件夹拖入 Xcode,并将其设置为 Embed & Sign。
Permissions
SDK 需要以下权限。请将这些配置添加到应用的Info.plist 中:
Info.plist 配置示例
NFC 配置
仅在安装 NFC 或 All 变体时需要。如果您安装的是 Core 或 AutoDetection 变体,请跳过本节。 要为带芯片的护照和身份证启用 NFC 读取,请按以下步骤操作:-
在 Xcode 中添加 NFC 功能:
- 选择您的目标 → Signing & Capabilities → + Capability → Near Field Communication Tag Reading
-
在
Info.plist中添加 ISO7816 标识符:
D392F000260100000001 可让 SDK 通过 JPKI 读取日本 My Number 卡。若不添加该标识符,iOS 不会将此卡报告给 SDK。My Number 卡读取功能尚未在生产环境中启用,该标识符对其他证件没有任何影响,因此您现在即可添加。
- 添加 Entitlements(在您的
.entitlements文件中):
App Store 审核(NFC 和 All 变体):如果您安装的是 NFC 或 All 变体,即使您的工作流不使用 NFC,Apple 在审核时也可能要求提供演示视频,因为 SDK 二进制文件中包含 NFC 相关代码。请发送邮件至 support@didit.me 索取我们的 NFC 演示视频,用于提交给 Apple。此要求不适用于 Core 或 AutoDetection 变体。
快速开始
SwiftUI 集成
UIKit 集成
集成方式
SDK 支持两种集成方式:方式一:UniLink(最简单)
无需后端。SDK 使用您在 Didit 控制台中获取的工作流 ID 直接创建会话。UniLink 方式(startVerification(workflowId:))仅支持 vendorData;如需其他会话参数,请使用方式二。
要通过 UniLink 将
vendorData 附加到会话,请在 Didit 控制台中启用 供应商数据 选项。方式二:后端会话(生产环境推荐)
您的后端通过创建验证会话 API(POST /v3/session/)创建会话,该接口支持全部参数(contact_details、expected_details、metadata、callback 等),然后将 session_token 传递给 SDK。
- 将会话与您的用户关联(
vendor_data) - 设置联系方式和预期信息,用于交叉验证
- 设置自定义元数据
- 为每个会话配置回调
配置
使用DiditSdk.Configuration 自定义 SDK 的行为:
配置选项
摄像头选项
摄像头选项与 Web SDK 摄像头选项一致。 每个镜头为.front 或 .back。
如果设备没有所请求的镜头,SDK 会使用设备上的第一个摄像头。
在只有一个摄像头的设备上,摄像头切换按钮也会隐藏。
将切换按钮选项设为 false,即可将用户锁定在该步骤的默认镜头上。
主题与颜色:颜色、背景和引导页设置需要在 Didit Console 中通过您的白标设置进行配置,而不是在 SDK 配置中设置。这可确保各平台品牌一致。
选项
showLanguageSelector、showCloseButton、showExitConfirmation 和 closeOnComplete 与 Web SDK 的 DiditSdkConfiguration 一致。移动端专属的 languageLocale 和 fontFamily 选项之所以存在,是因为移动端 SDK 以原生方式渲染完整的验证界面(不同于 Web SDK,后者在 iframe 中交由托管前端处理)。语言支持
SDK 支持 54 种语言。若未指定语言,SDK 会使用设备区域设置,并以英语作为回退语言。高级会话参数
如需使用高级会话参数(contact_details、expected_details、metadata、callback),请使用 Backend Session 方式。您的后端需调用创建验证会话 API 并传入完整参数,然后将 session_token 传递给 SDK。
处理结果
VerificationResult 枚举提供验证的结果:
结果分支
SessionData 属性
错误类型
连接中断
如果设备在验证过程中断开连接,SDK 会在流程中显示“无网络连接”页面,而不是让步骤一直加载。 SDK 会在后台持续检测,一旦 Didit 恢复可访问,便会自动关闭该页面,用户会从所在的步骤继续操作。 该页面提供 Try Again 按钮;当showCloseButton 为 true(默认值)时,还会提供 Exit Verification 按钮。
退出会以 .failed(error: .networkError, session:) 结束验证,使您的应用得知用户是因连接问题而离开的。
完整结果处理示例
以编程方式关闭验证
在 DiditSDK 3.6.0+ 中可用。
DiditSdk.shared.dismiss() 以编程方式结束正在进行的验证。当宿主需要接管屏幕时(例如应用进入后台),推荐使用这种方式关闭验证。
dismiss() 会走 SDK 的常规完成流程:关闭已展示的界面、重置内部状态,并使用 .cancelled(session:) 调用 .diditVerification 处理程序。如果已创建会话,该结果会携带当前的 sessionId。没有进行中的验证时,调用此方法不会产生任何效果。
应用进入后台时的关闭示例
观察 SDK 状态
你可以观察 SDK 状态,以便自定义加载界面:端到端示例,从后端会话到 iOS SDK 再到结果
这种模式是可用于生产环境的集成方案。你的后端创建会话,iOS 应用接收session_token,然后由 SDK 运行整个流程。