Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex SmartCaptcha
  • Начало работы
    • Все руководства
    • Добавление HTML-страницы для работы Yandex SmartCaptcha
    • Капча в приложении Android
    • Невидимая капча в приложении Android
    • Капча в приложении Android на Flutter
    • Капча в приложении iOS
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений

В этой статье:

  • Перед началом работы
  • Создайте JavaScript Interface
  • Настройте WebView для работы с капчей
  • Обработайте событие, при котором капча выдала пользователю задание
  • Получите результат прохождения капчи
  • Особенности
  1. Практические руководства
  2. Невидимая капча в приложении Android

Невидимая SmartCaptcha в приложении на Android

Статья создана
Yandex Cloud
Обновлена 28 апреля 2025 г.
  • Перед началом работы
  • Создайте JavaScript Interface
  • Настройте WebView для работы с капчей
  • Обработайте событие, при котором капча выдала пользователю задание
  • Получите результат прохождения капчи
  • Особенности

Чтобы встроить невидимую SmartCaptcha в приложение на Android:

  1. Создайте JavaScript Interface.
  2. Настройте WebView для работы с капчей.
  3. Обработайте событие, при котором капча выдала пользователю задание.
  4. Получите результат прохождения капчи.

Перед началом работыПеред началом работы

  1. Разместите HTML-код для работы SmartCaptcha (или воспользуйтесь готовым https://smartcaptcha.yandexcloud.net/webview).
  2. Создайте капчу по инструкции.
  3. Получите ключи капчи. Скопируйте значения полей Ключ клиента и Ключ сервера на вкладке Обзор созданной вами капчи. Ключ клиента понадобится для загрузки страницы с капчей, Ключ сервера — для получения результата прохождения капчи.

Создайте JavaScript InterfaceСоздайте JavaScript Interface

  1. Создайте класс, который будет принимать сообщения с помощью функции обратного вызова от веб-страницы с капчей.

  2. Определите методы с аннотациями @JavascriptInterface:

    • onGetToken(token: String) — веб-страница возвращает токен прохождения капчи.
    • onChallengeVisible() — открытие всплывающего окна с заданием.
    • onChallengeHidden() — закрытие всплывающего окна с заданием.
    class WebJsInterface {
    
      @JavascriptInterface
      fun onGetToken(token: String) {
        //Ваш код.
      }
    
      @JavascriptInterface
      fun onChallengeVisible() {
        //Ваш код.
      }
    
      @JavascriptInterface
      fun onChallengeHidden() {
        //Ваш код.
      }
    }
    

Настройте WebView для работы с капчейНастройте WebView для работы с капчей

  1. Создайте WebView и добавьте его на экран.

  2. Загрузите в WebView URL веб-страницы с капчей.

  3. Вставьте в URL query-параметры:

    val webView = findViewById<WebView>(R.id.webViewCaptcha)
    webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиентской_части>&invisible=true")
    

    Где:

    • sitekey — ключ клиента, который вы получили ранее.
    • invisible=true — капча перейдет в невидимый режим работы.
  4. Добавьте в WebView созданный JavaScript Interface. Укажите вторым параметром NativeClient — имя, на которое веб-страница будет отправлять сообщения с помощью функции обратного вызова:

    settings.javaScriptEnabled = true //Включает выполнение JavaScript.
    addJavascriptInterface(WebJsInterface(), "NativeClient")
    

Обработайте событие, при котором капча выдала пользователю заданиеОбработайте событие, при котором капча выдала пользователю задание

  1. Напишите логику появления WebView при помощи метода onChallengeVisible(). Он вызывается, когда капча показала задание.

    Пример реализации с переключением visibility — пока капча обрабатывала действие, WebView был в состоянии View.GONE:

    val webView = activity.findViewById<WebView>(R.id.webViewCaptcha)
    webView.visibility = View.VISIBLE
    
  2. Напишите логику для события, при котором пользователь не прошел задание и свернул его. Тогда будет вызван метод onChallengeHidden(), при помощи которого нужно убрать WebView.

    Пример возвращения WebView к состоянию View.GONE:

    val webView = activity.findViewById<WebView>(R.id.webViewCaptcha)
    webView.visibility = View.GONE
    

Получите результат прохождения капчиПолучите результат прохождения капчи

  1. Сохраните токен прохождения капчи. Он вернется в методе onGetToken(token: String), когда сервис обработает попытку.

  2. Для проверки токена отправьте 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=<токен>
    
  3. Получите ответ с сервера. Он содержит JSON-объект с полями status и message.

    Например:

    • Это человек:
    {
      "status": "ok",
      "message": ""
    }
    
    • Это робот:
    {
      "status": "failed",
      "message": ""
    }
    

ОсобенностиОсобенности

Невидимая капча требует меньше памяти, чем обычная — она не загружает код, который отрисовывает кнопку Я не робот.

Однако, у пользователей, которым будет показано задание, время загрузки виджета может варьироваться. Поэтому мы рекомендуем предупреждать пользователей о показе капчи, чтобы не вводить их в замешательство во время ожидания.

Была ли статья полезна?

Предыдущая
Капча в приложении Android
Следующая
Капча в приложении Android на Flutter
Проект Яндекса
© 2025 ООО «Яндекс.Облако»