gpt4 book ai didi

android - 在 Firebase Auth 中,如何检测匿名用户已升级到例如Facebook的用户?

转载 作者:行者123 更新时间:2023-12-02 12:51:25 25 4
gpt4 key购买 nike

我的 Android 应用程序中有一个单例,从应用程序启动时开始,它监听身份验证状态更改,如下所示:

fun listenForAuthChanges() {
if (authStateListener != null) {
FirebaseAuth.getInstance().removeAuthStateListener(authStateListener!!)
}
authStateListener = FirebaseAuth.AuthStateListener { auth ->
val user = auth.currentUser
writeStatusToFirebase()
if (user != null) {
Log.debug("User : ${user.uid} -> ${user.loginType}")
} else {
Log.debug("User : signed out")
loginAnonymously()
}
}
FirebaseAuth.getInstance().addAuthStateListener(authStateListener!!)
}

这完美地工作,检测用户是否已注销或登录。正如您在上面的代码中使用 loginAnonymously() 所看到的,当没有用户登录时,我会自动匿名登录。然而,这就像一个魅力......当我调用 Firebase-UI 登录并且用户通过 Facebook 登录时,不会调用 Auth 状态监听器。

我发现 FirebaseUI 实际上并没有创建新用户,而是将匿名用户升级为 Facebook 用户(在 Firebase Auth 控制台中检查并在 Android Studio 控制台中使用断点)。这实际上是我想要的行为。

所以我猜,结论是因为用户的uid没有改变,所以没有调用Auth状态监听器?

但是,我确实需要一种可靠的方法来检测此事件(意味着用户从匿名升级到例如 Facebook)。

最好的方法是什么?

注意:我知道可以检测用户使用什么身份验证提供程序 (id) 进行身份验证。
这是我用于此的一些代码:
val FirebaseUser.loginType: LoginType

get() {
if (isAnonymous) {
return LoginType.Anonymous
}
loop@ for (userInfo in providerData) {
when (userInfo.providerId) {
EmailAuthProvider.PROVIDER_ID -> return LoginType.Email
GoogleAuthProvider.PROVIDER_ID -> return LoginType.Google
FacebookAuthProvider.PROVIDER_ID -> return LoginType.Facebook
else -> continue@loop
}
}
return LoginType.Unknown

}

这不是我的问题,我的问题是:如何检测到用户已经 升级 从匿名到例如Facebook?

最佳答案

how to detect that a user has been upgraded from anonymous to e.g. Facebook?



匿名用户首次登录时,将认证类型保存在数据库中:
Firestore-root
|
--- users (collection)
|
--- uid
|
--- type: "anonymous"

当用户更改身份验证类型时,您只需更改 type数据库中的字段保存“Facebook”而不是“匿名”。这是可能的,因为 uid无论提供者 ID 是什么,都将始终相同。要在操作发生时得到通知,只需在 type 上附加一个监听器即可。属性(property),您将收到实时通知。

关于android - 在 Firebase Auth 中,如何检测匿名用户已升级到例如Facebook的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61183783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com