Сеть безопасности Google addOnFailureListener не срабатывает, когда пользователь закрывает диалоговое окно проверки

Обратите внимание, что я опубликовал вопрос / вопрос в google, например, github repo, https://github.com/googlesamples/android-play-safetynet/issues/12. Тем не менее, я пока не получил ответа.

используемая версия библиотеки: com.google.android.gms: play-services-safetynet: 11.4.2

Я использую API безопасности captcha API. все работает, как и ожидалось, и то и другое обнаруживается: - при успешном выполнении (при тестировании на реальном устройстве и при отсутствии вреда) - один прослушиватель сбоев (при тестировании с эмулятором Android и проверении шагов)

Тем не менее, следующие шаги приводят к появлению проблемы, при которой при успехе и при неудаче не обнаруживаются: - Запустите приложение в эмуляторе Android - Нажмите "Проверка безопасности" с помощью капчи - Как эмулятор Android пометит как возможный вред, он покажет изображение для проверки - Нажмите на значок прослушивания чтобы прослушать слово - нажмите на экран за пределами диалогового окна, диалоговое окно проверки закроется

Ожидается: addOnFailureListener должен быть запущен, потому что пользователь не ответил на шаги проверки при обнаружении в качестве робота

Фактически: и OnSuccessListener, и addOnFailureListener не обнаружены

Образец кода

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());
                    }
                }
        });

Вопросы:

  • Это ожидаемый дизайн, в котором, если пользователь закрывает диалоговое окно проверки, то SafetyNet не уведомляет слушателя?
  • Есть ли какой-либо другой слушатель для SafetyNet, чтобы обработать сценарий выше проблемы? или другие решения для обработки этого сценария из SafetyNet SDK?

Спасибо

1 ответ

Решение проблемы Github - обработать действие onResume()

Когда капча защитной сетки отменена: В моем случае требовалось заканчивать анимацию на кнопке, когда капча защитной сетки была отклонена. Таким образом, пользователь сможет щелкнуть по нему еще раз.

При сбое системы безопасности captcha: они предложили закрыть весь диалог onResume()

В Котлине ответ на это должен быть:

      supportFragmentManager.fragments.takeIf { it.isNotEmpty() }?.map { (it as? DialogFragment)?.dismiss() }

Для java вы можете найти ответ здесь:Android - Как закрыть все диалоги в onPause

Другие вопросы по тегам