当前位置: 首页 > 知识库问答 >
问题:

Firebase手机认证-应用程序验证(SafetyNet)

滑文昌
2023-03-14

我想用SafetyNet验证电话号码Firebase,而不是重新CAPTCHA验证。我在这里遵循Firebase留档:https://firebase.google.com/docs/auth/android/phone-auth

  • 在谷歌API控制台中,我启用了Android设备验证API
  • 在Firebase控制台中,我添加了SHA-256指纹
  • 重新安装谷歌服务。json并将其添加到项目中

它总是将我重定向到网页,以验证我不是机器人。我试着移除

implementation 'androidx.browser:browser:1.3.0'

但应用程序崩溃了。

这是我用于SafetyNet的代码,它总是成功,但随后会显示网页。我想知道如何防止应用程序总是重定向到reCAPTCHA验证,尽管认证功能工作正常。

private fun checkSafetyNet() {
        if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
            == ConnectionResult.SUCCESS
        ) {
            val nonce =
                (getString(R.string.app_name) + Random.nextInt(100) + getString(R.string.otp_verification)).toByteArray()
            SafetyNet.getClient(this.requireActivity())
                .attest(nonce, API_KEY)
                .addOnSuccessListener {
                    // Indicates communication with the service was successful
                    setFirebasePhoneVerificationCallbacks()
                    startPhoneNumberVerification()
                }.addOnFailureListener { e ->
                    // An error occurred while communicating with the service.
                    if (e is ApiException) {
                        // An error with the Google Play services API contains some
                        // additional details.
                        val apiException = e as ApiException
                        Log.i("SAFETYERROR", apiException.message.toString())
                        // You can retrieve the status code using the
                        // apiException.statusCode property.
                    } else {
                        // A different, unknown type of error occurred.
                        Log.d("SafetyNetError", "Error: " + e.message)
                    }
                }

        } else {
            // Prompt user to update Google Play services.
        }
    }

共有1个答案

毛德华
2023-03-14

根据firebase,只有在以下情况下才会触发reCAPTCHA流:

>

  • 当SafetyNet不可用时。

    如果用户不支持Google Play服务,或者当您在模拟器上测试应用程序时。

    您的设备未通过可疑检查。

    如果您的设备已根植或设备引导加载程序处于UNLOCKED状态,则由于第三种情况,应用程序reCAPTCHA验证将可见。

    检查应用日志中的标记"SafetyNet",并确认设备引导加载程序是否已锁定或解锁。

    如果引导加载程序未锁定,safetyNet将提供屏幕截图中提到的建议锁定引导加载程序。日志示例:

    "SafetyNetAtteStation验证器E未通过SafetyNetAtteStation响应。"

    “SafetyNetAttestationVerifier E无法html" target="_blank">分析SafetyNet DetectionResponse”

    msgstr"SafetyNetAtteStation验证器E SafetyNet验证失败基本完整性。"

    “SafetyNetateStationVerifier E SafetyNet认证有建议:XXXXXXXX”

  •  类似资料:
    • 我已经在我现有的android项目上附加了firebase,并运行了它。这是一个场景:如果应用程序通过开发者模式从android studio运行,它(通过电话号码登录Firebase)运行平稳,我也能成功登录。但是,每当我构建签名的调试apk,Firebase都不允许登录。它给出了以下信息: 此应用程序未被授权使用Firebase身份验证。请验证firebase控制台中配置了正确的包名称和SHA

    • X2.3.0新增(暂时无法使用) sp_check_mobile_verify_code($mobile='',$verifycode='') 功能: 手机验证码检查,验证完后销毁验证码增加安全性 参数: $mobile: 手机号 $verifycode:验证码 返回: 类型boolean true:手机验证码正确,false:手机验证码错误 使用: $is_right_mobile_code

    • 可用于强制重新发送SMS验证码。然而,在对医生做了一些研究之后,我仍然不知道该怎么做。

    • 我已经在我的android应用程序中添加了Firebase手机认证,它运行良好,但是应用程序名称没有包含在短信验证消息中,因为它出现在Firebase控制台的短信模板中:(%LOGIN_CODE%是%APP_NAME%的校验码。)。 我收到的消息如下:(%LOGIN_CODE%是您的验证码) 我的应用程序的调试版本和发布版本都有这个问题。 那么,如何将应用程序名称添加到此消息中。

    • 我正在寻找一种方法来查找从Firebase电话身份验证发送给我的代码,因为我想手动验证该代码。现在的问题是Firebase正在自动检测短信并调用onVerficationComplted(),但我有一个按钮,我想手动输入otp代码并验证。下面是我的代码。如果有任何帮助,将不胜感激。谢谢

    • 接口说明 用来验证输入的手机号是否已注册 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/validatePhone 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 phone string form 是 手机号 响应字段说明 参数 类型 说明 phoneVali String