如何在视图模型中实现firebase电话身份验证



我正试图使用Kotlin在视图模型中添加Firebase Phone身份验证代码。问题是PhoneAuthProvider需要一个活动。有人知道如何在不需要活动的情况下在视图模型中实现这些代码吗?

谢谢!

val mCallbacks: PhoneAuthProvider.OnVerificationStateChangedCallbacks ...
val options = PhoneAuthOptions.newBuilder(auth).apply {
setPhoneNumber(phoneNumber)
setTimeout(120L, TimeUnit.SECONDS)
setActivity(this) <-------------------------- // Activity (for callback binding)
setCallbacks(mCallbacks)
}.build()
PhoneAuthProvider.verifyPhoneNumber(options)

这是API 20中的一个有意更改(请在Github上查看此问题(,尽管它违反了MVVM架构。需要活动的原因是该方法返回到reCAPTCHA。实现这一目标的正确方法是";"待定";。

我的方法是在viewModel中包含所有内容,包括回调。然后,我调用viewModel中的一个函数,并传入一个活动参数。见下文:

fun verifyPhoneNumber(phoneNumber: String, activity: Activity) {
_validFullPhoneNumber.value = phoneNumber
val options = PhoneAuthOptions.newBuilder(mAuth)
.setPhoneNumber(phoneNumber)       // Phone number to verify
.setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
.setActivity(activity)
.setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
.build()
PhoneAuthProvider.verifyPhoneNumber(options)
}

在UI控制器中,在我的情况下,一个片段我称之为:

viewModel.verifyPhoneNumber(validatedPhoneNumber, requireActivity())

与重新发送按钮功能相同。

视图模型:

fun resendVerificationCode(activity: Activity) {
val options =
PhoneAuthOptions.newBuilder(mAuth)
.setPhoneNumber(_validFullPhoneNumber.value!!) // Phone number to verify
.setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
.setActivity(activity)
.setCallbacks(callbacks) // OnVerificationStateChangedCallbacks
.setForceResendingToken(_resendToken) // ForceResendingToken from callbacks
.build()
PhoneAuthProvider.verifyPhoneNumber(options)
_isVerificationCodeExpired.value = false
}

UI控制器(碎片(:

viewModel.resendVerificationCode(requireActivity())

最新更新