如何在视图模型中实现 firebase phone auth?
How can firebase phone auth be implemented in view model?
我正在尝试使用 Kotlin 在视图模型中添加 Firebase Phone 身份验证代码。问题是 PhoneAuthProvider
需要 activity。有谁知道如何在不需要 activity 的情况下在视图模型中实现此代码?
谢谢!
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)
原来是API20(check out this issue on Github)中的一个有意改动,尽管它违反了MVVM架构。需要 activity 的原因是该方法回退到 reCAPTCHA。正确的实现方式“待定”。
我的方法是将所有内容都包含在 viewModel 中,包括回调。然后我在 viewModel 中调用一个函数并传入一个 activity 参数。见下文:
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())
我正在尝试使用 Kotlin 在视图模型中添加 Firebase Phone 身份验证代码。问题是 PhoneAuthProvider
需要 activity。有谁知道如何在不需要 activity 的情况下在视图模型中实现此代码?
谢谢!
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)
原来是API20(check out this issue on Github)中的一个有意改动,尽管它违反了MVVM架构。需要 activity 的原因是该方法回退到 reCAPTCHA。正确的实现方式“待定”。
我的方法是将所有内容都包含在 viewModel 中,包括回调。然后我在 viewModel 中调用一个函数并传入一个 activity 参数。见下文:
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())