谷歌安全网addOnFailureListener在用户关闭验证对话框时不会触发

10

注意:我已经在Google示例GitHub库上发布了这个问题/疑问,https://github.com/googlesamples/android-play-safetynet/issues/12。然而,我尚未收到任何回应。

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

我正在使用SafetyNet验证码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处理此情况的其他解决方案?

谢谢


你在这个问题上找到任何解决方案了吗? - Ando Masahashi
请参考此已创建的问题 https://github.com/googlesamples/android-play-safetynet/issues/12 - sayvortana
你能把你的解决方案放在答案里,这样其他人就可以在这里找到它。 - Ando Masahashi
1个回答

0

Github问题的解决方案是处理onResume()操作

当安全网验证码被取消时: 在我的情况下,要求是在安全网验证码被解除时结束按钮上的动画。这样用户就可以再次点击它。

当安全网验证码失败时: 他们建议在onResume()中关闭所有对话框

Kotlin的答案应该是:

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

关于Java,你可以在这里找到答案:Android - How to Dismiss All Dialogs in onPause


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接