用于firebase实时数据库/ firebase身份验证的Android唯一密钥

时间:2017-02-18 09:51:38

标签: android firebase firebase-authentication

我正在开展一个项目,用户应该可以在没有任何登录的情况下使用应用程序。但他们也应该能够使用他们的谷歌帐户登录,以便将他们的数据与多个设备同步。

如何为“匿名”用户获取唯一标识符?我知道有一个方法,比如.push().getKey()从实时数据库中获取一个uid,但是我可以在哪里将这个密钥存储在设备上?

我还在使用firebase身份验证,因此当人们使用他们的Google帐户访问该应用时,我可以使用来自firebase身份验证的Uid。在firebase身份验证中还有一个匿名用户选项,但我不想这样做,因为这只会临时存储数据。

1 个答案:

答案 0 :(得分:1)

你混淆了两件事:

  • Firebase数据库有一个名为push()的方法,可生成统计上保证唯一的ID。
  • Firebase身份验证为每个注册用户生成一个UID,保证所有用户都是唯一的。

这两个值彼此没有关系。

如果要识别用户,请使用Firebase身份验证注册用户,并使用用户的UID进行识别。如果您不希望用户必须登录,请使用anonymous authentication。这很简单:

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