10

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

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

我正在使用安全网验证码 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 处理这种情况的解决方案?

谢谢

4

1 回答 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

于 2021-05-24T12:19:06.010 回答