问题描述
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。