微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firebase 电话身份验证 - 应用验证(SafetyNet)

如何解决Firebase 电话身份验证 - 应用验证(SafetyNet)

我想使用 SafetyNet 验证电话号码 Firebase,而不是 reCAPTCHA 验证。我正在关注此处的 Firebase 文档:https://firebase.google.com/docs/auth/android/phone-auth

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

它总是将我重定向一个网页以验证我不是机器人。我尝试删除

implementation 'androidx.browser:browser:1.3.0'

但是应用程序崩溃了。

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

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.
        }
    }

解决方法

根据 firebase,只会触发 reCAPTCHA 流程:

  1. SafetyNet 不可用时。

  2. 如果用户没有 Google Play 服务支持或当您在模拟器上测试您的应用时。

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

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

检查您的应用日志中是否有“SafetyNet”标签,并确认您的设备引导加载程序是否已锁定或解锁

在解锁引导加载程序的情况下,safetyNet 会像截图中提到的那样给出建议 LOCK_BOOTLOADER。日志示例:

“SafetyNetAttestationVerifier E 没有通过 SafetyNet AttestationResponse。”

“SafetyNetAttestationVerifier E 无法解析 SafetyNet AttestationResponse”

“SafetyNetAttestationVerifier E SafetyNet Attestation 无法实现基本完整性。”

“SafetyNetAttestationVerifier E SafetyNet Attestation 有建议:XXXXXXXX”

In case of unlocked bootloader

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?