移动端和 Web SDK

iOS、Android、React Native 和 Flutter 的原生 SDK 把整个流程嵌入你的应用中,也是唯一支持 NFC 的方式。Web SDK 则把流程嵌入你的前端。

Short answer

原生 SDK 支持 iOS、Android、React Native 和 Flutter;Web SDK 则把流程嵌入你的前端。 当你需要 NFC 或最佳摄像头表现时,请使用原生 SDK,WebView 两者都无法提供。 结果仍然通过 webhook 返回,而不是来自 SDK 本身。

#为什么用 SDK 而不是重定向

托管重定向的工作量最小,对大多数流程来说也确实够用。 在以下情况下,SDK 是值得的:

  • 你需要 NFC。 护照或身份证中的芯片无法从浏览器页面读取。原生 SDK 是唯一的途径。参见 NFC 芯片验证
  • 你不希望用户离开你的应用。 在移动端,跳转出去再跳回来是一个真实的流失点。
  • 你想要最佳的摄像头表现。 原生摄像头访问比浏览器更可靠,尤其是在较旧的设备上。

#有哪些可用

平台说明
iOS以 XCFramework 形式分发
Android通过 Maven 分发
React Native封装原生模块,支持新架构
Flutter封装原生模块
JavaScript / Web把托管流程嵌入你的 Web 前端
内嵌式 iframe在你的页面内渲染流程,而不是重定向
Didit 控制台中的集成页面,展示 SDK 和文档链接
  1. 选择你的平台,页面会给出该技术栈对应的代码片段。
  2. 这里链接了原生和 Web SDK,各自附带独立的快速上手指南。
每个 SDK 都从与 API 相同的页面开始。

版本要求和平台最低支持会随发布变化,因此请查看最新的 SDK 文档,而不要依赖帮助页面里的旧信息。 如果你使用某个特定的框架版本(例如某个具体的 Expo SDK 版本),建议在投入一个冲刺周期之前,先与你的 Didit 联系人确认兼容性。

#WebView 不是原生 SDK

在 WebView 中包装托管的 Web 流程,看起来像是提供了应用内体验,但实际只是它的外观:

  • 没有 NFC。 芯片仍然无法读取。
  • 摄像头权限更难处理。 WebView 的摄像头访问取决于宿主应用的配置,配置错误就会产生修复活体检测与人脸比对问题中提到的"摄像头始终无法打开"的报告。
  • 语言跟随应用,而不是用户。 WebView 上报的是宿主应用的语言,因此需要在创建会话时显式传入 language。参见设置验证语言

如果你愿意投入精力做应用内流程,就应该使用原生 SDK。

#结果仍然来自 webhook

这一点常常让人意外:SDK 会告诉你的应用用户已经完成了流程,但它不是验证决策的权威来源。

决策是在检查运行结束后在服务端生成的,并通过 webhook 送达。 永远不要仅凭 SDK 的完成回调就授予访问权限:客户端信号很容易被伪造,而且回调触发时检查甚至可能还没完成。

Important

把"SDK 说完成了"当作"用户已通过验证",是移动端集成中后果最严重的错误。 在解锁任何权限之前,请通过服务端、通过 webhook 或决策接口进行确认。

#一个消费者应用,还是你自己的应用?

并不存在一个独立的 Didit 消费者应用,让托管会话把用户交给它去完成 NFC 之类的步骤。 如果你想要在一个应用体验中同时拥有 NFC 和非 NFC 的能力,那个应用就是你自己的,SDK 嵌入在其中。

#分发和依赖冲突

原生 SDK 集成偶尔会与宿主应用中的其他依赖发生冲突,例如一个共享的传递依赖库,或者某个子模块锁定了另一个依赖也锁定的版本。 如果遇到这种情况,这是一个具体的、可复现的问题,值得连同你的依赖清单一起报告,而不是通过锁定旧版本来绕过它:修复通常应该在 SDK 一侧完成。

#在设备上测试

沙盒在 SDK 中的表现与其他地方相同:把应用指向沙盒应用的密钥,所有检查都会被模拟且不产生费用。 这是排练移动端流程的正确方式,因为你最需要测试的 SDK 行为(权限弹窗、摄像头生命周期、采集过程中切到后台)都是设备行为,可以反复测试而不产生任何成本。 参见在沙盒中测试