Репозиторий на 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 поставляется в нескольких вариантах, чтобы ваше приложение добавляло в бинарный файл только те функции, которые использует. Выберите ровно один вариант: один subspec CocoaPods и один библиотечный продукт SwiftPM.
- Core: наименьший размер, с автоматическим захватом документа и селфи на собственных легковесных детекторах Didit. Без
OpenSSL.xcframeworkи без среды выполнения CoreNFC. - AutoDetection: устарел начиная с 4.11.0 и полностью идентичен Core. Используйте Core.
- NFC: Core плюс считывание чипов NFC в паспортах и eID.
- All: все функции. Это вариант по умолчанию, если вы устанавливаете
DiditSDKбез указания subspec или продукта.
4.9.0): Core ~11.1 МБ, NFC ~11.7 МБ плюс ~4 МБ OpenSSL, AutoDetection ~16.0 МБ, All ~16.6 МБ плюс OpenSSL.
Модели детекции загружаются во время выполнения и кешируются, поэтому они никогда не учитываются в размере загрузки вашего приложения.
Начиная с 4.11.0, автоматический захват работает на собственных легковесных детекторах Didit во всех вариантах. TensorFlow Lite больше не входит в состав SDK, а фреймворк стал меньше, потому что его переводы загружаются извне бинарного файла.
Начиная с 4.6.0, поставляемые фреймворки больше не содержат дескрипторов Swift ABI (метаданных сборки, которые Xcode копирует в каждое приложение, но никогда не читает) и обучающих видео, которые вариант не может воспроизвести. При обновлении с 4.5.4 или более ранней версии приложение уменьшится примерно на 7-8 МБ без каких-либо изменений в коде.
App Store сжимает бинарные файлы при доставке, поэтому стоимость загрузки по воздуху ниже. Точную разницу для каждого устройства смотрите в отчёте о размере приложения в App Store Connect.
Варианты NFC и All содержат
OpenSSL.xcframework (OpenSSL 3.3.3, поставляется как OpenSSL-Universal 3.3.3001 через NFCPassportReader), который необходим для аутентификации чипа NFC и требует iOS 15.0+. Релизы до 4.0.6 включительно содержали OpenSSL 1.1.1s; 4.0.7 и более поздние поставляются с OpenSSL 3.3.3, собственным манифестом конфиденциальности и подписью кода. Всегда устанавливайте 4.0.7 или более позднюю версию. Обратите внимание: обновление выравнивает версии OpenSSL, но не устраняет конфликты при встраивании. Если другая зависимость вашего приложения тоже встраивает OpenSSL.framework (то же имя файла, тот же bundle id com.github.krzyzanowskim.OpenSSL), две копии конфликтуют на этапе встраивания независимо от версии. Оставьте ровно одну копию: например, переопределите другой пакет по идентификатору SPM, чтобы использовать опубликованный Didit OpenSSL.xcframework, и тогда в бандле будет именно тот бинарный файл, с которым собран этот SDK. Варианты Core и AutoDetection не подключают OpenSSL вообще.import DiditSDK в коде вашего приложения одинаков независимо от того, какой вариант вы установили.
Swift Package Manager (рекомендуется)
Добавьте пакет в проект через Xcode:- Откройте File > Add Package Dependencies
- Введите URL репозитория:
- Выберите версию (или Up to Next Major начиная с
4.13.2) и нажмите Add Package - Когда появится запрос на выбор продукта, выберите ровно один библиотечный продукт для вашего варианта (см. таблицу выше)
Package.swift:
CocoaPods
DiditSDK распространяется как бинарный podspec, размещённый в репозитории (в публичном CocoaPods Trunk его нет), поэтому нужно указать URL podspec. Выберите ровно один subspec:
Core и AutoDetection поддерживают iOS 13; NFC и All требуют iOS 15 из-за NFCPassportReader.
Затем выполните:
После
pod install откройте сгенерированный .xcworkspace, а не .xcodeproj.Ошибки rsync в Xcode 15+: если во время сборки появляются ошибки rsync
Operation not permitted, установите Build Settings → User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) в значение Нет для проекта, и для Debug, и для Release.Ручная установка (XCFramework)
Каждый релиз публикует по одному XCFramework на каждый вариант. Скачайте архивы для вашего варианта со страницы GitHub Releases, затем перетащите папки.xcframework в Xcode и выставьте Embed & Sign.
Permissions
Для работы SDK требуются следующие разрешения. Добавьте их вInfo.plist вашего приложения:
Примеры записей Info.plist
Настройка NFC
Требуется только при установке варианта NFC или All. Пропустите этот раздел, если вы установили вариант Core или AutoDetection. Чтобы включить считывание NFC для паспортов и ID-карт с чипами:-
Добавьте возможность NFC в Xcode:
- Выберите цель → Signing & Capabilities → + Capability → Near Field Communication Tag Reading
-
Добавьте идентификаторы ISO7816 в
Info.plist:
D392F000260100000001 позволяет SDK считывать карту My Number Card (Япония) через JPKI: без него iOS не передает карту в SDK. Считывание карт My Number Card пока не включено в продакшн-среде, а этот идентификатор не влияет на другие документы, поэтому его можно добавить уже сейчас.
- Добавьте права (в файл
.entitlements):
Проверка в App Store (варианты NFC и All): если вы установили вариант NFC или All, Apple может запросить демонстрационное видео во время проверки, поскольку код, связанный с NFC, входит в бинарный файл SDK, даже если ваш сценарий не использует NFC. Запросите наше демонстрационное видео с NFC, чтобы отправить его в Apple, по адресу support@didit.me. Это не относится к варианту Core или AutoDetection.
Быстрый старт
Интеграция SwiftUI
Интеграция UIKit
Методы интеграции
SDK поддерживает два метода интеграции:Метод 1: UniLink (самый простой)
Бэкенд не требуется. SDK создает сессию напрямую, используя ваш ID сценария из Didit Console. Метод UniLink (startVerification(workflowId:)) поддерживает только vendorData; для любых других параметров сессии используйте Метод 2.
Чтобы
vendorData передавался в сессию через UniLink, включите опцию Vendor Data в Didit Console.Метод 2: сессия на бэкенде (рекомендуется для продакшн-среды)
Ваш бэкенд создает сессию через Create Verification Session API (POST /v3/session/) с полной поддержкой параметров (contact_details, expected_details, metadata, callback и др.), затем передает session_token в SDK.
- Связыванием сессий с вашими пользователями (
vendor_data) - Заданием контактных данных и ожидаемых данных для перекрестной проверки
- Заданием пользовательских метаданных
- Настройкой обратного вызова для каждой сессии
Configuration
Настройте поведение SDK с помощьюDiditSdk.Configuration:
Параметры конфигурации
Параметры камеры
Параметры камеры совпадают с параметрами камеры Web SDK. Каждый объектив обозначается значением.front или .back.
Если на устройстве нет запрошенного объектива, SDK использует первую камеру, которая у него есть.
Переключатель камеры также скрыт на устройствах с одной камерой.
Установите параметр переключателя в false, чтобы зафиксировать пользователя на объективе по умолчанию для этого шага.
Оформление и цвета: цвета, фоны и настройки вступительного экрана задаются в ваших настройках White label в Didit Console, а не в конфигурации SDK. Так брендинг остаётся одинаковым на всех платформах.
Параметры
showLanguageSelector, showCloseButton, showExitConfirmation и closeOnComplete совпадают с конфигурацией DiditSdkConfiguration в Web SDK. Параметры 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 снова становится доступен. Пользователь продолжает с того шага, на котором находился. На экране есть кнопки Повторить попытку и, еслиshowCloseButton равен true (по умолчанию), Выйти из верификации.
Выход завершает верификацию с результатом .failed(error: .networkError, session:), поэтому ваше приложение узнаёт, что пользователь ушёл из-за соединения.
Полный пример обработки результата
Программное закрытие верификации
Доступно в DiditSDK 3.6.0+.
DiditSdk.shared.dismiss(). Это рекомендуемый способ остановить верификацию, когда хосту нужно взять управление экраном, например при переходе приложения в фон.
dismiss() проходит обычный конвейер завершения SDK: он закрывает показанный интерфейс, сбрасывает внутреннее состояние и вызывает обработчик .diditVerification с .cancelled(session:), содержащим текущий sessionId, если сессия была создана. Если верификация не активна, вызов ничего не делает.
Пример: закрытие при переходе приложения в фон
Наблюдение за состоянием SDK
Можно отслеживать состояние SDK для собственного интерфейса загрузки:Сквозной пример (сессия на бэкенде → iOS SDK → результат)
Этот подход готов к продакшну. Бэкенд создаёт сессию, iOS-приложение получаетsession_token, а SDK запускает процесс.