GitHub 代码仓库
在 GitHub 上查看源代码和示例
原生 SDK:推荐 Android 应用采用此方式。原生 SDK 提供最佳的用户体验、经过优化的相机处理以及完整的 NFC 支持。
要求
按 API 级别划分的功能可用性:证件和人脸自动检测需要 API 24+(Didit 自有的轻量检测器,包含在
didit-sdk-core 中)。在 API 23 的设备上,SDK 会回退为手动拍摄,并使用带定时功能的快门按钮。其他所有功能均支持完整的 API 23+ 范围。生物识别同意需要原生 SDK 4.10.0 或更高版本。 对于受伊利诺伊州、德克萨斯州或科罗拉多州法律约束的用户,Didit 可以在首次人脸采集前请求明确的生物识别同意。Android SDK 4.10.0 及更高版本会显示该步骤。较早版本无法显示该步骤:其会话照常运行,决策结果(
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK")会将同意报告为未收集。如果您在这些州验证用户,请升级。安装
步骤 1 添加仓库
在settings.gradle.kts 的 repositories 块中添加 Didit Maven 仓库:
settings.gradle(Groovy),请改用:
步骤 2 添加依赖
在应用的build.gradle.kts 中添加 SDK 依赖:
(!) 关于版本号,请务必到 GitHub 仓库 查看最新版本。
build.gradle(Groovy),请改用:
SDK 变体
Android SDK 以多个独立构件的形式发布,因此您的应用只需为所用功能承担相应的二进制体积。上文的me.didit:didit-sdk 是完整包。请选择适合您应用的构件:
自
4.6.0 起,原生 WalletConnect 钱包签名以独立的可选插件形式发布,即 me.didit:didit-sdk-wallet。完整包 me.didit:didit-sdk 已包含该插件,因此如果您安装完整包,无需任何改动。如果您使用精简构件之一,并希望钱包所有权确认在应用内以原生方式运行,请将 me.didit:didit-sdk-wallet 与之一同添加;若不添加该插件,SDK 会改为通过安全的浏览器流程完成钱包所有权确认,因此该功能无论如何都能正常使用。将 WalletConnect 移出 didit-sdk-core 后,所有不需要它的构建也都减少了数 MB 的钱包相关依赖。
所有构件均以相同版本发布,因此请将它们都保持在 4.13.2。
控制下载体积
自动采集所用的检测模型在运行时下载并缓存,因此不会计入应用体积。自动采集给应用增加的部分是 ML 运行时的原生库,其体积取决于 CPU 架构:arm64-v8a 约 10 MB,armeabi-v7a 约 7 MB,两种 x86 模拟器架构各约 13 MB。
要只承担一次这部分成本:
- 发布 Android App Bundle(AAB)。Google Play 只会投递设备自身的架构和语言,因此 arm64 手机安装的原生代码约为 10 MB(压缩后的下载体积约为 4 MB)。通用 APK 会打包全部四种架构,超过 40 MB,这是尺寸测量结果异常偏大的最常见原因。
-
如果您分发单个 APK,且目标用户是 ARM 手机和平板,请限制打包的架构:
请保留用户实际运行的所有 ABI:如果面向 Chromebook 或其他 x86 设备,请添加
x86_64;或者发布按 ABI 拆分的 APK,确保没有设备失去支持。 -
启用 R8:在 release 构建类型中设置
isMinifyEnabled = true和isShrinkResources = true(如果使用 Groovy 版build.gradle,则设置minifyEnabled true/shrinkResources true)。SDK 自带使用方规则,因此无需任何额外配置,未使用的 SDK 代码即会被移除。 -
如果 APK 构建中不需要全部 48 个 SDK 本地化区域(locale),请使用
resConfigs(...)限制打包的语言;在 Google Play 上,AAB 语言拆分会自动处理这一点。
步骤 3 添加打包排除规则
在应用的android 块中添加以下内容,以避免构建冲突:
权限
SDK 需要以下权限。这些权限在 SDK 的AndroidManifest.xml 中声明,并会自动合并到您应用的清单文件中:
相机与 NFC 功能
SDK 将android.hardware.camera 和 android.hardware.nfc 声明为可选功能(android:required="false")。这样,即使设备没有相机或 NFC 硬件,您的应用也能安装;SDK 会在运行时妥善处理缺失的硬件。
快速开始
步骤 1: 初始化 SDK
在您的Application.onCreate() 中初始化 SDK:
步骤 2: 启动验证并处理结果
集成方式
SDK 支持两种集成方式:方式 1: UniLink (最简单)
无需后端。SDK 直接使用您在 Didit Console 中获取的工作流 ID 创建会话。仅限于vendorData。
方式 2: 后端会话 (推荐用于生产环境)
您的后端通过 创建验证会话 API(POST /v3/session/)创建会话,该 API 支持完整的参数(contact_details、expected_details、metadata、callback 等)。然后,将 session_token 传递给 SDK。
- 将会话与您的用户关联(
vendor_data) - 设置自定义元数据
- 为每个会话配置回调
- 提供联系方式和预期信息,用于交叉验证
配置
自定义 SDK 行为:配置选项
相机选项
相机选项与 Web SDK 相机选项一致。 每个镜头为CameraLens.FRONT 或 CameraLens.BACK。
如果设备没有所请求的镜头,SDK 将使用设备上的第一个相机。
在只有一个相机的设备上,也会隐藏相机切换按钮。
将切换按钮选项设为 false,即可将用户锁定在该步骤的默认镜头上。
选项
showLanguageSelector、showCloseButton、showExitConfirmation 和 closeOnComplete 与 Web SDK 的 DiditSdkConfiguration 一致。移动端专属选项 languageLocale 和 fontFamily 的存在,是因为移动端 SDK 以原生方式渲染完整的验证界面(而 Web SDK 则将其委托给 iframe 内的托管前端)。主题与颜色:颜色、背景和引导页设置通过 Didit Console 中的 白标设置 配置,而不是在 SDK 配置中配置。这样可确保所有平台的品牌形象保持一致。
语言支持
SDK 支持 54 种语言。如果未指定语言,SDK 将使用设备语言区域,并以英语作为备选。高级选项
如需使用高级会话参数(contact_details、expected_details、metadata、callback),请使用 后端会话 方式。您的后端使用完整参数调用 创建验证会话 API,然后将 session_token 传递给 SDK。
Handling Results
VerificationResult 密封类提供验证的结果:
结果类型
SessionData 属性
错误类型
所有错误均为me.didit.sdk.VerificationError 的密封子类:
网络连接中断
如果设备在验证过程中断网,SDK 会显示一个”无网络连接”屏幕,而不是让某个步骤一直处于加载状态。SDK 会在后台持续检测连接,一旦可以连接到 Didit,该屏幕会自动关闭,用户将从中断前所在的步骤继续操作。该屏幕提供 重试 按钮;当showCloseButton 为 true(默认值)时,还会提供 退出验证 按钮。退出后,验证将以 VerificationResult.Failed(error = VerificationError.NetworkError, session = ...) 结束,因此您的应用能够得知用户是因网络原因而退出的。
完整结果处理示例
观察 SDK 状态
您可以观察 SDK 状态,以实现自定义的加载界面:ProGuard / R8
SDK 内置了自己的使用方 ProGuard 规则,无需额外配置。 如果您使用 R8 完整模式,可能需要在gradle.properties 中添加以下内容:
端到端示例 (后端会话 → Android SDK → 结果)
此模式即为可用于生产环境的集成方式。您的后端创建会话,您的 Android 应用接收session_token,然后由 SDK 运行验证流程。