我正在研究Firebase身份验证,其中需要将Firebase身份验证放在我的存储库中。我找到了有关如何执行此操作的文章,但它使用RxJava。 (https://www.simplifiedcoding.net/firebase-mvvm-example/)
现在,我想知道是否只有kotlin解决方案,因为我不想使用RxJava,因为我正在使用kotlin协程。
fun facebookLogin(credential: AuthCredential) = Completable.create { emitter -> // change Completable.create since it is a RxJava
firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task ->
if (!emitter.isDisposed) {
if (task.isSuccessful)
emitter.onComplete()
else
emitter.onError(task.exception!!)
}
}
}
答案 0 :(得分:0)
Continuation 允许您将同步转换为异步
过去,在协程官方代码实验室中对此有一些看法,但他们似乎已将其删除。样板大致如下:
suspend fun facebookLogin(...): Boolean {
return suspendCoroutine { continuation ->
firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task ->
if (task.isSuccessful)
continuation.resume(true)
else
continuation.resumeWith(Result.failure(task.exception))
}
}
}
}
要从ViewModel调用它,
fun login () {
viewModelScope.launch{
facebookLogin(...)
}
}
如果不在视图模型上,则可以随时
CoroutineContext(Dispatchers.IO).launch{
facebookLogin(...)
}