首页 > 解决方案 > Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha “验证你不是机器人”

问题描述

作为 Firebase verifyPhoneNumber() 流程的一部分,Android 需要什么配置以及在哪里(我需要进行)停止 recaptcha?

请参阅屏幕录制。

在浏览器中的机器人验证打开之前,会记录以下内容:“SafetyNet Attestation 基本完整性失败”。

我已经验证了以下内容:

  1. 为我的项目启用了 Android 设备验证。然而,这并没有起到任何作用。
  2. 正如许多 SO 帖子所建议的那样,删除了 Firebase Analytics 和其他依赖项,但仍然无济于事。
  3. 我已经添加了我的 SHA1,但也将我的 SHA256 添加到了 Firebase 项目设置中。
  4. 为了排除我的应用程序中的某种依赖问题,我创建了一个全新的准系统 Flutter 应用程序,除了 Firebase Core 和 Auth 以及 Flutter 中 Firebase 所需的典型设置之外,它的依赖项为零。发生同样的事情(屏幕录制)。
  5. 更新 - 此处可能的答案: 文档状态:“reCAPTCHA 验证:如果无法使用 SafetyNet,例如当用户没有 Google Play 服务支持时,或者在模拟器上测试您的应用时,Firebase 身份验证使用 reCAPTCHA验证以完成电话登录流程。” 我猜它是根据文档工作的,但是在 SO 上有很多帖子,用户表示即使在模拟器中他们也能够克服这个问题。

此应用未发布到 Google Play,仅在模拟器和物理 Android 设备上进行测试。

Firebase 中发生了一些变化,但我找不到任何文档说明如何在 Android 上为 Firebase verifyPhoneNumber() 克服 recaptcha。

在recaptcha 返回后,codeSentreturns 和其他verifyPhoneNumber()参数工作得很好。

await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: '$_countryCode$_phoneNumber',
  verificationCompleted:(PhoneAuthCredential credential) {
    print('verificationCompleted');
  },
  verificationFailed: (FirebaseAuthException e) {
    print('verificationFailed');
  },
  codeSent: (String verificationId, int resendToken) {
    print('codeSent');
  },
  codeAutoRetrievalTimeout: (String verificationId) {
    print('codeAutoRetrievalTimeout');
  },
);

[在此处输入图像描述

标签: firebaseflutterdartfirebase-authenticationflutter-dependencies

解决方案


自从我上次使用以来,Firebase 电话身份验证已更新。

文档状态:

reCAPTCHA 验证:如果无法使用 SafetyNet,例如当用户没有 Google Play 服务支持时,或者在模拟器上测试您的应用时,Firebase 身份验证会使用 reCAPTCHA 验证来完成手机登录流程。

在之前没有看到 reCAPTCHA 之后看到它让我感到惊讶,所以我认为我的某些设置不正确。

只是一个很好的安全功能,可以与 Firebase Phone Auth 无缝协作。


推荐阅读