android - 如果我在 firebase 身份验证中有很多多余的匿名用户可以吗?

标签 android firebase kotlin firebase-authentication anonymous

<分区>

我想让新用户在决定使用 Gmail、Facebook 或电子邮件和密码登录之前可以看到我的应用程序中的一些内容。所以首先我需要让他们在使用此代码安装应用程序时匿名登录

auth.signInAnonymously()

然后,在他们试用之后,他们决定使用 Google 帐户登录,我使用此代码将具有特定 UID(假设 UID 为 q1q2q3)的用户转换为使用 Google 作为身份验证提供程序。

auth.currentUser!!.linkWithCredential(credential)

然后假设他们卸载并重新安装该应用程序。因此他们将再次匿名登录,并且他们将获得与匿名用户不同的 UID(假设新的 UID 是 aXXXX12345b ),即使他们再次使用 Google 登录,他们将以 q1q2q3 身份登录

所以现在我有一个多余的匿名用户 (aXXXX12345b)。像这样有一个多余的匿名认证用户可以吗?我的意思是,我担心我会达到 firebase 身份验证的一些限制。我应该怎么办 ?对于这种情况有更好的方法吗?我不知道这是否是一种普遍做法

最佳答案

and then let say, they uninstall, and reinstall the app. so they will sign in anonymously again and they will get different uid as anonymous user (let say the new uid is aXXXX12345b )

是的,没错,为新的匿名用户生成了一个新的 UID。

even though if they login using google again, they will sign in as q1q2q3

此时您的数据库中有两个用户。第一个是使用 Google 帐户转换为真实用户的匿名用户,第二个是尚未转换的匿名用户。但是,如果您想使用与以前完全相同的帐户将第二个用户转换为真实用户,这是不可能的,因为该帐户已经存在,因此将抛出包含以下消息的异常:

This credential is already associated with a different user account.

只有当您使用不同的 Google 帐户时,您才能转换第二个匿名用户。

so now I have a redundant anonymous user (aXXXX12345b)

不,你不知道。您有一个真实帐户和一个匿名帐户。只有当用户决定卸载应用程序时,第二个才可能是多余的。如果您担心 Firebase 的限制,请向匿名用户提供注销的可能性。当用户点击注销按钮时,您需要做两件事:

  1. 如果您将匿名用户的数据存储在数据库、Cloud Firestore 或 Firebase 实时数据库以及 Firebase 存储中,请将其删除。

    db.collection("users").document(uid).delete().addOnCompleteListener(/* ... /*);
    
  2. 也使用以下方法从 Firebase 身份验证中删除用户:

    firebaseUser.delete().addOnCompleteListener(/* ... /*);
    

这样一来,Firebase 服务器上就什么都没有了。

is it okay to have a redundant anonymous authenticated users like this?

不,这不好。这就是为什么您应该尽可能多地清理数据。

关于android - 如果我在 firebase 身份验证中有很多多余的匿名用户可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61985450/

相关文章:

android - [Android][ListView]无法在 fragment 中显示ListView

android - Gradle 更新到 v 5.4 后无法解析 com.google.android.exoplayer2

android - 如何知道我的手机使用的互联网连接类型

javascript - 无法使用第一个数组值从 firebase 获取数据

Firebase函数context.auth和context.authType未定义

nullable - 在 Kotlin 中,处理可为空值、引用或转换它们的惯用方法是什么?

sql - Kotlin 公开 - 没有标识列的表的实体

java - Android ListView 性能

android - 如何在 android Volley 中优化 network-queue-take? ( Volley 谷歌 IO 2013)

ios - Swift ios Firebase 不返回任何数据