Yandex SmartCaptcha в приложении на Android
Чтобы встроить SmartCaptcha в приложение на Android:
- Создайте JavaScript Interface.
- Настройте WebView для работы с капчей.
- Получите результат прохождения капчи.
Перед началом работы
- Разместите HTML-страницу на своем сервере или воспользуйтесь страницей на сервере Yandex Cloud —
https://smartcaptcha.yandexcloud.net/webview
). - Создайте капчу.
- На вкладке Обзор получите ключи капчи:
- Ключ клиента — для загрузки страницы с капчей;
- Ключ сервера — для получения результата прохождения капчи.
Создайте JavaScript Interface
-
Создайте класс, который будет принимать сообщения с помощью функции обратного вызова от веб-страницы с капчей.
-
Определите метод
onGetToken(token: String)
с аннотацией@JavascriptInterface
. Он вызывается, когда веб-страница возвращает токен прохождения капчи:class WebJsInterface { @JavascriptInterface fun onGetToken(token: String) { //Ваш код. } }
Настройте WebView для работы с капчей
-
Создайте WebView и добавьте его на экран.
-
Загрузите в WebView URL веб-страницы с капчей.
-
Вставьте в URL query-параметр
sitekey=<ключ_клиентской_части>
:val webView = findViewById<WebView>(R.id.webViewCaptcha) webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиентской_части>")
-
Добавьте в WebView созданный JavaScript Interface. Укажите вторым параметром
NativeClient
— это имя, на которое веб-страница будет отправлять сообщения с помощью функции обратного вызова:settings.javaScriptEnabled = true // Включает выполнение JavaScript. addJavascriptInterface(WebJsInterface(), "NativeClient")
Получите результат прохождения капчи
-
Сохраните токен прохождения капчи. Он вернется в методе
onGetToken(token: String)
, когда сервис обработает попытку. -
Для проверки токена отправьте POST-запрос на адрес
https://smartcaptcha.yandexcloud.net/validate
, передав параметры в форматеx-www-form-urlencoded
:secret
— ключ сервера;token
— одноразовый токен, полученный после прохождения проверки;ip
— IP-адрес пользователя, с которого пришел запрос на проверку токена. Этот параметр не обязателен, однако мы просим передавать IP-адрес пользователя при запросах. Это помогает улучшить качество работы SmartCaptcha.
Примечание
Данная логика должна выполняться на бэкенде. В само Android-приложение секретный ключ
secret
попасть не должен.Пример запроса:
https://smartcaptcha.yandexcloud.net/validate?secret=<ключ_сервера>&ip=<IP-адрес_пользователя>&token=<токен>
-
Получите ответ с сервера. Он содержит JSON-объект с полями
status
иmessage
.Например:
- Это человек:
{ "status": "ok", "message": "" }
- Это робот:
{ "status": "failed", "message": "" }