Виджет KYC работает в браузере, поэтому в мобильное приложение его встраивают через WebView или открывают в системном браузере. Ниже — что нужно настроить, чтобы камера и проверка работали.
Какой способ выбрать
| Способ | Когда подходит | Что настроить |
|---|---|---|
| Страница с виджетом в WebView | Проверка должна идти внутри приложения | Разрешение камеры в приложении и в WebView, см. ниже |
| Прямая ссылка в системном браузере (Safari View Controller, Custom Tabs) | Нужен самый простой путь без настройки WebView | Адрес возврата в сценарии, см. «Прямая ссылка с возвратом» |
Страница с виджетом в <iframe> | Не рекомендуется — только если без фрейма не обойтись | allow="camera" у фрейма |
Общие требования
- Страница с виджетом открывается по HTTPS с вашего домена. Локальный файл или нестандартная схема адреса не подойдут: браузер не даст камеру, а виджет работает только на разрешённых доменах.
- Домен страницы добавлен в «Доступ» → «Разрешённые домены». Подробнее — Подключение.
- Пользователь выдаёт приложению доступ к камере.
iOS (WKWebView)
- Добавьте в
Info.plistключNSCameraUsageDescriptionс понятным пользователю текстом. Без него приложение не получит камеру. - Включите воспроизведение видео внутри страницы:
allowsInlineMediaPlayback = true. Иначе превью камеры откроется в полноэкранном плеере или не появится. - Чтобы WebView не спрашивал разрешение повторно для своей страницы, выдайте его в делегате (iOS 15 и новее).
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
config.mediaTypesRequiringUserActionForPlayback = []
let webView = WKWebView(frame: .zero, configuration: config)
webView.uiDelegate = self
webView.load(URLRequest(url: URL(string: "https://your-domain.example/kyc")!))
// WKUIDelegate
func webView(_ webView: WKWebView,
requestMediaCapturePermissionFor origin: WKSecurityOrigin,
initiatedByFrame frame: WKFrameInfo,
type: WKMediaCaptureType,
decisionHandler: @escaping (WKPermissionDecision) -> Void) {
decisionHandler(origin.host == "your-domain.example" ? .grant : .prompt)
} Android (WebView)
- Объявите разрешение
CAMERAвAndroidManifest.xml. - Запросите
CAMERAу пользователя во время работы приложения, до открытия проверки. - Включите JavaScript и хранилище страницы, разрешите автозапуск видео.
- Выдайте странице доступ к камере в
WebChromeClient.onPermissionRequest— без этого WebView откажет странице, даже если приложению камера разрешена.
<uses-permission android:name="android.permission.CAMERA" /> webView.settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
mediaPlaybackRequiresUserGesture = false
}
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
val video = PermissionRequest.RESOURCE_VIDEO_CAPTURE
if (request.origin.host == "your-domain.example" &&
request.resources.contains(video)) {
request.grant(arrayOf(video))
} else {
request.deny()
}
}
}
webView.loadUrl("https://your-domain.example/kyc") Встроенные браузеры мессенджеров и соцсетей
Ссылка, открытая внутри мессенджера или соцсети, попадает во встроенный браузер, где доступ к камере может быть ограничен. Если проверка не запускается, предложите пользователю открыть ссылку в системном браузере (Safari, Chrome). В своём приложении для той же цели используйте Safari View Controller на iOS и Custom Tabs на Android: в них камера работает как в обычном браузере.
Встраивание в iframe
❗ Не рекомендуется встраивать Web SDK в
<iframe>. Подключайте виджет только в основную страницу сайта — как элемент корневого DOM-документа.
Если без фрейма не обойтись, разрешите ему камеру:
<iframe src="https://your-domain.example/kyc" allow="camera"></iframe> Инлайн-режим (mountElementId) внутри cross-origin iframe не работает — см. Подключение.
Прямая ссылка с возвратом в приложение
Вместо встраивания можно открыть проверку по прямой ссылке в системном браузере, Safari View Controller или Custom Tabs:
https://kyc.neuro-vision.ru/<scenarioId>/<зашифрованный clientKey> - В основных настройках сценария задайте «URL-адрес мобильного перенаправления в случае успеха» — адрес, который ваше приложение умеет перехватить (например, универсальная ссылка или App Link на вашем домене).
- По завершении виджет переходит на этот адрес и дописывает
?sessionId=<id сессии>&status=<итоговый статус>: при итогеsuccess— автоматически через 5 секунд, при любом итоге — по кнопке возврата на экране результата. - Приложение перехватывает адрес, закрывает браузер и показывает пользователю следующий шаг.
Статус из адреса — подсказка для интерфейса. Итог проверки берите на сервере из вебхука или запросом статуса сессии. Как собрать ссылку и зашифровать clientKey — Подключение и Работа с clientKey.
Если камера не запускается
| Признак | Что проверить |
|---|---|
| Виджет показывает экран «разрешите доступ к камере» | Разрешение камеры у приложения в настройках телефона; на Android — onPermissionRequest |
| Превью камеры открывается на весь экран или чёрное (iOS) | allowsInlineMediaPlayback = true |
| Виджет не открывается на странице | Страница по HTTPS, домен в «Разрешённых доменах» |
| Не работает только во встроенном браузере мессенджера | Откройте ссылку в системном браузере |