Firebase实时数据库/ Firebase认证的Android唯一密钥

3
我正在处理一个项目,用户可以在没有登录的情况下使用应用程序。但是他们也应该能够使用他们的Google帐户登录以将其数据与多个设备同步。
如何为“匿名”用户获取唯一标识符?我知道存在一种方法,例如.push().getKey()从实时数据库中获取uid,但是在设备上哪里可以存储此键?
我还在使用Firebase身份验证,因此当人们使用其Google帐户进行应用程序时,我可以使用来自Firebase身份验证的Uid。 Firebase身份验证还提供了匿名用户选项,但我不想使用它,因为这只会临时存储数据。

"但是在哪里可以在设备上存储这个密钥?" - Firebase数据库也支持离线功能。您可以在此处阅读更多信息(https://firebase.google.com/docs/database/android/offline-capabilities)。 - Rosário Pereira Fernandes
1个回答

1
你混淆了两件事情:
- Firebase数据库有一个名为push()的方法,它生成一个在统计上保证唯一的ID。 - Firebase身份验证为每个注册用户生成一个UID,该UID在所有用户中保证是唯一的。
这两个值之间没有关系。
如果你想识别一个用户,请使用Firebase身份验证注册该用户并使用用户的UID来识别他们。如果你不想让你的用户登录,可以使用匿名身份验证。这很简单:
FirebaseAuth.getInstance().signInAnonymously();

然后,您可以等待用户注册并获取他们的UID:

FirebaseAuth.getInstance(). addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            // User is signed in
            Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
        } else {
            // User is signed out
            Log.d(TAG, "onAuthStateChanged:signed_out");
        }
        // ...
    }
});;

UID会自动储存在设备上,因此当用户重新启动应用时,onAuthStateChanged也会触发。请确保只有在用户之前尚未登录时才调用signInAnonymously

用户应该能够在不注册的情况下完全使用该应用程序。如果他们想要“备份”或同步自己的数据,他们可以选择这样做。对于匿名用户,如果我每次启动应用程序时都不调用signInAnonymously(),那么他们在Firebase身份验证中的UID会保持不变吗? - Ian Fako
是的。调用 signInAnonymously() 会创建一个 UID,在应用程序重新启动时保留。因此,除非您再次调用它,否则用户将保持相同的 UID,并且他们的 Firebase 认证帐户甚至可以链接到其他提供者(请参见 https://firebase.google.com/docs/auth/android/account-linking)。 - Frank van Puffelen
那么我猜在我的数据库中使用这个匿名UID作为用户标识符是安全的?如果我做得没错,就不应该丢失任何数据了吧? - Ian Fako
只要用户不清除您的应用程序数据或卸载它,就是安全的。为此,请考虑使用电子邮件和密码身份验证(无需验证电子邮件),并仅通过uuids生成两者,而用户不知道。这仅在您希望用户能够备份和恢复数据而无需注册时才有用,但是此过程还需要手动恢复和持久化这些信息,这可能会导致安全问题。 - Hatzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接