API SafetyNet reCAPTCHA

Служба SafetyNet включает API reCAPTCHA, который можно использовать для защиты вашего приложения от вредоносного трафика.

reCAPTCHA — это бесплатный сервис, который использует расширенный механизм анализа рисков для защиты вашего приложения от спама и других злоупотреблений. Если сервис подозревает, что пользователь, взаимодействующий с вашим приложением, может быть ботом, а не человеком, он выдает CAPTCHA, которую должен решить человек, прежде чем ваше приложение сможет продолжить работу.

В этом документе объясняется, как интегрировать API reCAPTCHA от SafetyNet в ваше приложение.

Дополнительные условия обслуживания

Получая доступ или используя API reCAPTCHA, вы соглашаетесь с Условиями обслуживания API Google и следующими Условиями обслуживания reCAPTCHA. Пожалуйста, прочтите и поймите все применимые условия и политики перед доступом к API.

Условия обслуживания reCAPTCHA

Вы признаете и понимаете, что API reCAPTCHA работает, собирая информацию об оборудовании и программном обеспечении, такую ​​как данные об устройствах и приложениях, а также результаты проверок целостности, и отправляя эти данные в Google для анализа. В соответствии с Разделом 3(d) Условий обслуживания API Google вы соглашаетесь с тем, что если вы используете API, то вы несете ответственность за предоставление любых необходимых уведомлений или согласий на сбор и передачу этих данных Google.

Зарегистрируйте пару ключей reCAPTCHA

Чтобы зарегистрировать пару ключей для использования с API SafetyNet reCAPTCHA, перейдите на сайт регистрации reCAPTCHA Android , затем выполните следующую последовательность шагов:

  1. В открывшейся форме укажите следующую информацию:

    • Метка: Уникальная метка для вашего ключа. Обычно вы используете название вашей компании или организации.
    • Тип reCAPTCHA: выберите reCAPTCHA v2 , затем reCAPTCHA Android .
    • Пакеты: Предоставьте имя пакета каждого приложения, которое использует этот ключ API. Чтобы приложение использовало API, имя, которое вы вводят, должно точно соответствовать имени пакета приложения. Введите каждое имя пакета на собственной строке.
    • Владельцы: добавьте адрес электронной почты для каждого сотрудника вашей организации, который отслеживает оценки reCAPTCHA вашего приложения.
  2. Установите флажок Принять Условия обслуживания reCAPTCHA .

  3. Отправлять оповещения владельцам: установите этот флажок, если вы хотите получать электронные письма об API reCAPTCHA, затем нажмите « Отправить» .

  4. На следующей странице ваши открытый и закрытый ключи отображаются под Site key и Secret key соответственно. Вы используете site key при отправке запроса на проверку , а секретный ключ — при проверке токена ответа пользователя .

Добавьте зависимость API SafetyNet

Перед использованием API reCAPTCHA добавьте API SafetyNet в свой проект. Если вы используете Android Studio, добавьте эту зависимость в файл Gradle уровня приложения. Для получения дополнительной информации см. Настройка API SafetyNet .

Используйте API reCAPTCHA

В этом разделе описывается, как вызвать API reCAPTCHA для отправки запроса на проверку CAPTCHA и получения токена ответа пользователя.

Отправить запрос на проверку

Чтобы вызвать API SafetyNet reCAPTCHA, вы вызываете метод verifyWithRecaptcha() . Обычно этот метод соответствует выбору пользователем элемента пользовательского интерфейса, например кнопки, в вашей активности.

При использовании метода verifyWithRecaptcha() в вашем приложении необходимо сделать следующее:

  • Передайте ваш API-ключ сайта в качестве параметра.
  • Переопределите методы onSuccess() и onFailure() для обработки обоих возможных результатов задачи запроса проверки. В частности, если API передает экземпляр ApiException в onFailure() , вам необходимо обработать каждый возможный код статуса, который вы можете получить с помощью getStatusCode() .

Следующий фрагмент кода показывает, как вызвать этот метод:

Котлин

fun onClick(view: View) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
            .addOnSuccessListener(this as Executor, OnSuccessListener { response ->
                // Indicates communication with reCAPTCHA service was
                // successful.
                val userResponseToken = response.tokenResult
                if (response.tokenResult?.isNotEmpty() == true) {
                    // Validate the user response token using the
                    // reCAPTCHA siteverify API.
                }
            })
            .addOnFailureListener(this as Executor, OnFailureListener { e ->
                if (e is ApiException) {
                    // An error occurred when communicating with the
                    // reCAPTCHA service. Refer to the status code to
                    // handle the error appropriately.
                    Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")
                } else {
                    // A different, unknown type of error occurred.
                    Log.d(TAG, "Error: ${e.message}")
                }
            })
}

Ява

public void onClick(View v) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
        .addOnSuccessListener((Executor) this,
            new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
                @Override
                public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                    // Indicates communication with reCAPTCHA service was
                    // successful.
                    String userResponseToken = response.getTokenResult();
                    if (!userResponseToken.isEmpty()) {
                        // Validate the user response token using the
                        // reCAPTCHA siteverify API.
                    }
                }
        })
        .addOnFailureListener((Executor) this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    if (e instanceof ApiException) {
                        // An error occurred when communicating with the
                        // reCAPTCHA service. Refer to the status code to
                        // handle the error appropriately.
                        ApiException apiException = (ApiException) e;
                        int statusCode = apiException.getStatusCode();
                        Log.d(TAG, "Error: " + CommonStatusCodes
                                .getStatusCodeString(statusCode));
                    } else {
                        // A different, unknown type of error occurred.
                        Log.d(TAG, "Error: " + e.getMessage());
                    }
                }
        });
}

Проверить токен ответа пользователя

Когда API reCAPTCHA выполняет метод onSuccess() , пользователь успешно прошел CAPTCHA-тест. Однако этот метод указывает только на то, что пользователь правильно решил CAPTCHA. Вам все равно нужно проверить токен ответа пользователя с вашего внутреннего сервера.

Чтобы узнать, как проверить токен ответа пользователя, см. раздел Проверка ответа пользователя .