SuperAPI AI 工具集

sumsub-integrate-msdk

编程与开发

查看项目

更新于 10-15 14:04

技能介绍

用途

该技能用于把 Sumsub 的移动端 SDK(IdensicMobileSDK / SNSMobileSDK,主类为 SNSMobileSDK)集成进已有的原生 iOS 或 Android 应用,实现 KYC 验证流程的嵌入。即使使用者没有明确说出 SDK 名称,只要意图是“在原生 App 中加入 Sumsub 验证”,该技能即可适用。集成范围从依赖安装一直到在指定界面发起并展示验证流程,iOS 使用 Swift,Android 使用 Kotlin。

主要能力

  • 平台检测:通过扫描项目文件判断是 iOS 还是 Android 项目。iOS 标记包括 .xcodeproj、.xcworkspace、Podfile、Package.swift;Android 标记包括 build.gradle、build.gradle.kts、settings.gradle*、AndroidManifest.xml。若两者同时存在(如 monorepo 或带原生目录的 React Native / Flutter 外壳),会报告两者并询问要集成哪个平台,每次只处理一个平台。React Native / Flutter 包装器本身不在该技能范围内。
  • 安装方式:iOS 支持 CocoaPods 与 SPM(默认 SPM);Android 通过 Gradle 依赖安装。
  • 权限与能力配置:iOS 有独立的权限与能力配置步骤;Android 由 SDK 自行声明和请求相机/麦克风权限,技能明确禁止自行添加。
  • 集成代码生成:iOS 生成集成文件并接入目标;Android 由 Gradle 自动编译,无需单独的接入目标步骤。
  • 启动接入:iOS 区分 UIKit(ViewController)与 SwiftUI 两种宿主;Android 通过 ViewModel 动作触发 SumsubLauncher.present(…)。
  • 可选模块:基础 SDK 始终安装,覆盖标准验证流程;可选附加模块包括 NFC(护照/eMRTD 芯片读取,iOS 为 MRTDReader,Android 为 nfc 模块)、VideoIdent(与审核员实时视频通话)、EID(德国电子身份证读取)、Fisherman / Device Intelligence(欺诈信号;iOS 为可选模块,Android 自 1.43.0 起已捆绑在基础 SDK 中,无需额外添加)。模块为纯增量,不确定时可跳过,后续再添加。

使用方式

技能首先要求一次性提出三个问题:

  1. 启动入口:Sumsub 流程应从哪个界面打开(iOS 为 ViewController 或 SwiftUI 视图;Android 为 Activity、Fragment 或 Composable)。
  2. 访问令牌来源:应用是否已有从后端获取 Sumsub 访问令牌的方式;若有,提供函数名、端点 URL 或服务类;若没有,技能会添加占位符供后端就绪后填写。
  3. 可选模块:是否需要 NFC、VideoIdent、EID、Fisherman / Device Intelligence 等附加模块。

技能不会询问 App Token 或密钥,因为它们是服务端事务,不会接触应用端。

在操作授权方面:只读操作(扫描、grep、读取 Info.plist、AndroidManifest.xml 和构建文件)无需批准;变更操作会批量合并为一次批准请求,而不是逐行请求;仅在编辑现有应用代码、执行会改动项目的命令(pod install、Gradle 同步)、不可逆操作以及 intake 阶段无法确定的事项上明确请求许可。

平台检测完成后,技能按决策表只打开与平台、项目和用户回答匹配的分支文件。iOS 分支依次为:扫描、安装(CocoaPods 或 SPM)、权限与能力、集成文件、接入目标、启动(UIKit 或 SwiftUI)。Android 分支依次为:扫描、安装依赖、集成文件、启动。每个分支文件自包含,并以 Next 指针结尾。

适用场景

  • 在已有原生 iOS 或 Android 应用中嵌入 Sumsub KYC 验证流程。
  • 需要按平台选择安装方式(CocoaPods / SPM / Gradle)并生成对应集成代码。
  • 需要接入 NFC、VideoIdent、EID 或设备智能等可选模块。
  • 需要将验证流程从指定界面(UIKit ViewController、SwiftUI 视图、Activity、Fragment 或 Composable)发起。

限制与约束

  • 必须先检测平台,绝不向 Android 项目输出 Swift 或向 iOS 项目输出 Kotlin;两者同时存在时需询问集成哪个。
  • 除用户在 intake 中批准的单个目标调用点外,绝不编辑现有应用代码。
  • iOS 端必须让 SDK 自行展示,始终通过 SumsubVerification.start()(sdk.present() / sdk.present(from:))启动;不得强持有 SDK 或其 mainVC,也不得把 sdk.mainVC 桥接到 SwiftUI 的 .fullScreenCover / .sheet,否则会导致“隔次打开”及重新打开时崩溃。
  • Android 端绝不添加相机/麦克风权限或运行时提示,SDK 会自行声明和请求,自行添加可能导致重复提示或冲突。
  • Android 的令牌刷新处理器是同步的,onTokenExpired() 必须在后台线程返回令牌,需用 runBlocking 桥接 suspend 令牌调用,而非 iOS 的 async/回调模式。
  • 未经当前消息中的明确许可,绝不运行会改动项目的命令(pod install、Gradle 同步/构建)。
  • 绝不询问或引用 App Token 或密钥,也绝不在任何应用文件中存储或引用它们。
  • 绝不静默覆盖已有的 Info.plist / AndroidManifest 值,必须先展示当前值并询问。
  • 该技能不应用主题变更,样式属于 sumsub-theme-msdk。
  • 绝不以应用内回调作为访问门槛,权威结论来自后端(webhook + applicant GET),而非 SDK 回调。

交接

所有变更完成后,技能会总结:创建/修改的文件及一行描述;需要填写的占位符(如令牌获取为占位符,会明确说明用户需实现的内容;Android 上是单个 SumsubTokenProvider.fetchAccessToken suspend 函数,启动器会复用它进行会话中刷新);构建步骤(iOS:运行 pod install 后打开 .xcworkspace 构建,或直接构建运行由 SPM 自动解析;Android:同步 Gradle 后构建运行);测试方法(从后端获取沙箱访问令牌或临时硬编码,从启动点触发验证,确认 Sumsub 流程出现;NFC 模块需要物理设备,不能用 iOS 模拟器 / Android 模拟器);事实来源提醒(最终验证结果来自后端 webhook + applicant 读取,而非 SDK 回调);后续步骤指向 sumsub-theme-msdk 进行样式设置。