Мобильные и веб-SDK
Нативные SDK для iOS, Android, React Native и Flutter встраивают процесс прямо в ваше приложение и являются единственным вариантом с поддержкой NFC. Веб-SDK встраивают процесс на ваш фронтенд.
Нативные SDK существуют для iOS, Android, React Native и Flutter; веб-SDK встраивают процесс на ваш фронтенд. Используйте нативный SDK, когда вам нужен NFC или лучшее поведение камеры - WebView не даёт ни того, ни другого. Результаты всё равно приходят через webhook, а не из SDK.
#Зачем нужен SDK, а не просто редирект
Редирект на размещённую страницу требует меньше всего усилий и вполне подходит для большинства сценариев. SDK оправдан, когда:
- Вам нужен NFC. Чип в паспорте или удостоверении личности нельзя считать со страницы браузера. Нативный SDK - единственный вариант. См. верификация по NFC-чипу.
- Вы не хотите, чтобы пользователь покидал ваше приложение. Переход по редиректу и обратно - реальная точка отказа на мобильных устройствах.
- Вам нужно лучшее поведение камеры. Нативный доступ к камере надёжнее, чем через браузер, особенно на старых устройствах.
#Что доступно
| Платформа | Особенности |
|---|---|
| iOS | Распространяется как XCFramework |
| Android | Распространяется через Maven |
| React Native | Оборачивает нативные модули; поддерживает New Architecture |
| Flutter | Оборачивает нативные модули |
| JavaScript / веб | Встраивает размещённый процесс на ваш веб-фронтенд |
| Встроенный iframe | Отображает процесс прямо внутри вашей страницы вместо редиректа |

- Выберите свою платформу, и страница выдаст сниппет для вашего стека.
- Здесь есть ссылки на нативные и веб-SDK, у каждого свой быстрый старт.
Требования к версиям и минимальные версии платформ меняются с каждым релизом, поэтому сверяйтесь с актуальной документацией по SDK, а не со снимком этой справочной страницы - а если вы работаете на конкретной версии фреймворка (например, определённой версии Expo SDK), подтвердите совместимость у вашего контакта в Didit до того, как закладывать это в спринт.
#WebView - это не нативный SDK
Обёртка размещённого веб-процесса в WebView выглядит как встроенный в приложение опыт. Она даёт только видимость этого:
- Нет NFC. Чип по-прежнему нельзя считать.
- Разрешения на камеру сложнее получить. Доступ к камере из WebView зависит от настроек хост-приложения, и ошибка здесь приводит ровно к тем жалобам "камера так и не открылась", которые разобраны в статье решение проблем с liveness и совпадением лиц.
- Локаль берётся от приложения, а не от пользователя. WebView передаёт локаль хост-приложения, поэтому передавайте
languageявно при создании сессии. См. настройка языка верификации.
Если вы уже идёте на сложности ради процесса внутри приложения, используйте нативный SDK.
#Результаты по-прежнему приходят через webhooks
Здесь многие ошибаются: SDK сообщает вашему приложению, что пользователь завершил процесс. Это не авторитетный источник решения по верификации.
Решение формируется на стороне сервера после того, как проверки завершены, и доходит до вас через webhook. Никогда не открывайте доступ, полагаясь только на колбэк завершения от SDK - клиентский сигнал легко подделать, а проверки на момент его срабатывания могут быть даже не завершены.
Считать, что "SDK сказал - готово" равнозначно "пользователь верифицирован" - самая серьёзная ошибка, которую можно допустить в мобильной интеграции. Подтверждайте на своём сервере, через webhook или endpoint с решением, прежде чем открывать что-либо.
#Одно потребительское приложение или своё?
Отдельного потребительского приложения Didit, в которое размещённая сессия передавала бы пользователя для такого шага, как NFC, не существует. Если вы хотите получить всё - и с NFC, и без него - в рамках единого приложения, это приложение - ваше, со встроенным в него SDK.
#Дистрибуция и конфликты зависимостей
Интеграция нативного SDK иногда конфликтует с другими зависимостями хост-приложения - общей транзитивной библиотекой или сабспеком, который фиксирует версию, зафиксированную ещё чем-то другим. Если вы столкнулись с этим, это конкретная воспроизводимая проблема, о которой стоит сообщить вместе с манифестом зависимостей, а не обходить её, закрепляя старую версию: исправление обычно должно быть на стороне SDK.
#Тестирование на устройстве
Sandbox через SDK работает так же, как и везде - направьте приложение на ключ sandbox-приложения, и каждая проверка будет замокана и бесплатна. Это правильный способ отрепетировать мобильный процесс, потому что поведение SDK, которое важнее всего протестировать (запросы разрешений, жизненный цикл камеры, уход в фон посреди захвата), - это поведение устройства, которое можно проверять сколько угодно раз без затрат. См. тестирование в sandbox.
