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

is it okay if I have a lot of redundant anonymous users in firebase authentication?

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

auth.signInAnonymously()

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

auth.currentUser!!.linkWithCredential(credential)

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

所以现在我有一个多余的匿名用户 (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?

不,这不行。这就是为什么你应该尽可能清理数据。