gpt4 book ai didi

android - 当用户关闭验证对话框时,Google 安全网 addOnFailureListener 不会触发

转载 作者:行者123 更新时间:2023-12-04 23:38:37 26 4
gpt4 key购买 nike

备注 我将问题/问题发布到 google sample github repo , https://github.com/googlesamples/android-play-safetynet/issues/12 .但是,我还没有得到任何回应。

使用的库版本: com.google.android.gms:play-services-safetynet:11.4.2

我正在使用 safety net captcha API .一切都按预期工作,两者都被检测到:
- 成功时(使用真实设备进行测试且未检测到危害时)
- 一个失败监听器(使用 Android 模拟器测试并验证步骤时)

但是,此处的步骤会产生未检测到成功和失败的问题:
- 在 Android 模拟器中运行应用程序
- 使用验证码点击 SafetyNet 验证
- 由于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 处理这种情况的解决方案?

  • 谢谢

    最佳答案

    Github问题解决方案是处理 Action onResume()
    取消安全网验证码时:
    在我的情况下,要求是在解除安全网验证码时结束按钮上的动画。因此,用户将能够再次单击它。
    当安全网验证码失败时:
    他们建议关闭所有对话框 onResume()
    在 Kotlin 中,答案应该是:

    supportFragmentManager.fragments.takeIf { it.isNotEmpty() }?.map { (it as? DialogFragment)?.dismiss() }
    对于java,您可以在这里找到答案:
    Android - How to Dismiss All Dialogs in onPause

    关于android - 当用户关闭验证对话框时,Google 安全网 addOnFailureListener 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49306906/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com