【发布时间】:2021-04-03 05:36:21
【问题描述】:
我正在使用 Firebase,我正在尝试使用电话身份验证注册用户。
这是我的完整活动代码
class RegisterActivity : AppCompatActivity(){
private val auth = FirebaseAuth.getInstance()
private val timeoutSeconds = 60L
private lateinit var storedVerificationId: String
private lateinit var resendToken: PhoneAuthProvider.ForceResendingToken
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
registerbtn.setOnClickListener { registerButtonClicked() }
verifybtn.setOnClickListener { verifyButtonClicked() }
}
fun registerButtonClicked() {
registerPhoneNumber(editTextPhone.text.toString())
}
private fun verifyButtonClicked() {
verifyUser(editTextPhone.text.toString())
}
private fun registerPhoneNumber(phoneNumber: String) {
val options = PhoneAuthOptions.newBuilder(auth)
.setPhoneNumber(phoneNumber)
.setTimeout(timeoutSeconds, TimeUnit.SECONDS)
.setActivity(activity)
.setCallbacks(callbacks)
.build()
PhoneAuthProvider.verifyPhoneNumber(options)
}
private val callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
override fun onVerificationCompleted(credential: PhoneAuthCredential) {
signInWithPhoneAuthCredential(credential)
}
override fun onVerificationFailed(e: FirebaseException) {
}
override fun onCodeSent(
verificationId: String,
token: PhoneAuthProvider.ForceResendingToken
) {
storedVerificationId = verificationId
resendToken = token
}
}
private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
auth.signInWithCredential(credential)
.addOnCompleteListener(activity) { task ->
if (task.isSuccessful) {
Log.d(TAG, "signInWithCredential:success")
}
}
}
fun verifyUser(verificationCode: String) {
val credential = PhoneAuthProvider.getCredential(storedVerificationId, verificationCode)
signInWithPhoneAuthCredential(credential)
}
我得到了一个异常,storedVerificationId 没有设置,即使我已经在onCodeSent 中设置了它
我在这里做错了什么?我遵循的流程是否正确?
【问题讨论】:
-
我们无法在此处看到
storedVerificationId的声明位置,因此我们无法知道如何解决此问题。错误消息来自 Kotlin 编译器,与 Firebase 的工作方式无关。请编辑问题以关注处理storedVerificationId的源代码。它应该包含一个 complete, minimal example 的代码,它不能按您期望的方式工作。 -
它们在类中被定义为 lateint var,我将它们设置在 onCodeSent 中。更新了问题。 @DougStevenson
-
我根本看不到任何 lateinit 变量。请编辑问题以显示complete minimal code。不要只是描述它 - 将代码复制到您的问题中,以便我们可以看到编译器看到的内容。
-
对此感到抱歉。我刚刚更新了问题并发布了整个活动@DougStevenson
标签: android firebase kotlin firebase-authentication