繁体   English   中英

获取 Firebase Phone Auth OTP 时出错

[英]Error while geting Firebase Phone Auth OTP

我正在尝试实施 Firebase 电话验证。 我在 firebase 控制台上启用了电话验证。 我已生成密钥库并将 SHA 签名添加到控制台。

依赖项:

dependencies {
    def multidex_version = "2.0.1"
    implementation platform('com.google.firebase:firebase-bom:26.0.0')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.firebase:firebase-analytics'
    implementation "androidx.multidex:multidex:$multidex_version"
    implementation 'com.google.firebase:firebase-auth'
    implementation 'com.google.firebase:firebase-core'
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

}

phone_verification.dart

                await FirebaseAuth.instance.verifyPhoneNumber(
                  phoneNumber: '+1234567890',

                  verificationCompleted: (PhoneAuthCredential credential) {
                    print('verificationCompleted');
                    
                  },
                  verificationFailed: (FirebaseAuthException e) {
                    print('verificationFailed');
                    if (e.code == 'invalid-phone-number') {
                      print('The provided phone number is not valid.');
                    }
                    else {
                      print('Some error occoured: $e');
                    }
                  },
                  codeSent: (String verificationId, int resendToken) async {
                    print('codeSent');

                    // Update the UI - wait for the user to enter the SMS code
                    String smsCode = '123456';

                    // Create a PhoneAuthCredential with the code
                    PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);
                  
                  },
                  timeout: const Duration(seconds: 60),
                  codeAutoRetrievalTimeout: (String verificationId) {
                    print("Timeout: $verificationId");
                  },
                );

执行上述块时,会收到以下错误。 控制台 Output:

E/FirebaseAuth: [GetAuthDomainTask] Error getting project config. Failed with {
      "error": {
        "code": 400,
        "message": "INVALID_CERT_HASH",
        "errors": [
          {
            "message": "INVALID_CERT_HASH",
            "domain": "global",
            "reason": "invalid"
          }
        ]
      }
    }
     400
V/FA: Recording user engagement, ms: 1165
E/zza: Failed to get reCAPTCHA token - calling backend without app verification

@CubeRootX 和 @user13864571

您的问题与 SHA1 和 SHA256 密钥有关。 您必须添加它们以验证您的证书。

  • 您项目的 Firebase 控制台
  • 验证
  • 项目设置(从项目概览附近的设置按钮)
  • 添加指纹
  • 添加密钥库的 SHA-1 和 SHA-256 值。

您可以像这样从 gradle 获取密钥库。

./gradlew 签名报告

阅读更多信息: https : //firebase.google.com/docs/auth/android/phone-auth#enable-app-verification

在 Firebase 控制台中的身份验证下启用电话选项

错误 400 表示请求错误,可能是由于以下三个原因之一:-

  1. 检查是否在 firebase 控制台中启用了电话身份验证选项。 启用它。
  2. 检查是否在Google 云控制台中启用了 Android Device Check API。 启用它。
  3. 检查 SHA-1 和 SHA-256 是否已添加到您的 Firebase 项目中。 添加如下:

在 firebase 控制台中打开您的项目 -> 转到项目设置 -> 单击添加指纹(在页面底部)-> 在那里添加 SHA-1 和 SHA-256 值。 图片供参考

您可以按如下方式获取 android studio 项目的 SHA 值:-

点击右上角的gradle->任务->android->signingReport->运行signingReort后获取底部的SHA值,供参考

如果问题未解决,请按照文档进行操作

我被困在这里一个星期才发现我使用的密钥仅限于另一个应用程序,因此在我的应用程序中尝试使用它时失败。 所以我首先取消了Android设备验证中凭据选项卡中的限制,一切都恢复了正常

我们需要向@Anat Bharti 回答添加一个额外的步骤:在您的项目上启用 GCS 设备验证 API

在您的项目上启用 GCS 设备验证 API。 这解决了一切,你甚至没有要求在你的物理设备上验证验证码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM