Firebase 电话身份验证 OTP 不自动填充 EditText

问题描述

Firebase 电话身份验证自动发送 otp 不填写编辑文本。 otp 是在edittext 中手动输入的。如何自动检测传入的验证短信并通过用户操作进行验证?

Otp.kt

private fun sendVerificationCode(phone : String){


    val options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phone)       // Phone number to verify
        .setTimeout(60L,TimeUnit.SECONDS) // Timeout and unit
        .setActivity(this)                 // Activity (for callback binding)
        .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
        .build()
    PhoneAuthProvider.verifyPhoneNumber(options)




}

private val callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
    override fun onVerificationCompleted(p0: PhoneAuthCredential) {

        binding.btnOtpVerify.visible(true)
        binding.progressbarVerify.visible(false)
        val code = p0.smsCode

        if(code != null){
            binding.etotpView.setText(code)

            VerifyVerificationCode(code)

            signInWithPhoneAuthCredential(p0)
        }
    }

    override fun onVerificationFailed(p0: FirebaseException) {
        binding.btnOtpVerify.visible(true)
        binding.progressbarVerify.visible(false)

        Toast.makeText(this@OtpVerification,p0.message,Toast.LENGTH_LONG).show()
    }

    override fun onCodeSent(p0: String,p1: PhoneAuthProvider.ForceResendingToken) {
        super.onCodeSent(p0,p1)

        binding.btnOtpVerify.visible(true)
        binding.progressbarVerify.visible(false)
        storedVerificationID = p0
        resendingToken = p1


    }

}

解决方法

确保您已在 google 上启用 SafetyNet thing this

对于自动填充 editText 使用函数 onVerificationCompleted 中的代码

,

据我所知,您正在使用 Firebase PhoneAuth 来验证电话号码并通过 Firebase 服务器发送 OTP,您需要一个工作流程来检测包含 OTP 的传入 SMS 并使用此 OTP 自动填充您的 EditText。

要启用自动 OTP 检测,您可以使用 SmsRetriever API 和相关的 SMS User Consent API。

可以在 here 找到解释清楚的文档。 (包含指向几乎开箱即用的参考实现的更多链接,因此我不在这里包含该代码。)

请务必为您的用例选择合适的 API。