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. На следующей странице ваши открытый и закрытый ключи будут отображаться в полях «Ключ сайта» и «Секретный ключ» соответственно. Ключ сайта используется при отправке запроса на проверку , а секретный — при проверке токена ответа пользователя .

Добавьте зависимость 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. Вам всё равно необходимо проверить токен ответа пользователя на вашем внутреннем сервере.

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