当我们希望代码在登录 Firebase 后运行时,我们使用
addOnCompleteListener
像这样:
void signInToFirebaseUsing(GoogleSignInAccount googleAccount) {
AuthCredential credential = GoogleAuthProvider.getCredential(googleAccount.getIdToken(), null)
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener { ...
if (task.isSuccessful()) {
...
} else {
...
}
}
}
但是,firebase 并不是我想要登录的唯一服务。我需要同步 firebase 登录,以便我可以处理像这样的多个身份验证(我将 Kotlin 与 AsyncAwait library 结合使用,但您明白了):
private fun signInToAppUsing(googleAccount: GoogleSignInAccount) {
async {
try {
await { signInToRealmUsing(googleAccount) }
await { signInToFirebaseUsing(googleAccount) } // <- this won't work because firebase uses asynchronous listener
// User is signed in all services
} catch (e: Exception) {
// Signing in some service crashed
}
}
}
有办法做到这一点吗?
最佳答案
已经很晚了,但今天我遇到了这个问题,只想与其他人分享。我在互联网上查找并找到了一个有趣的解决方案。
因为我使用RxFirebase (这个版本兼容RxJava 1。如果您使用RxJava 2,请使用 Rx2Firebase ),所以我有一个简单的方法来解决这个问题。只需一行代码:
FirebaseUser user = RxFirebaseAuth.signInWithCredential(
FirebaseAuth.getInstance(), credential
).toBlocking().value();
如果您使用 Kotlin 协程,请使用 this扩展然后:
FirebaseAuth.getInstance().signInWithCredential(credential).await()
当然,这个任务应该在后台线程上启动。
关于Android firebase auth 同步登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473048/