Сеть безопасности 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