注意:我已经在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处理此情况的其他解决方案?
谢谢