我正在开展一个项目,用户应该可以在没有任何登录的情况下使用应用程序。但他们也应该能够使用他们的谷歌帐户登录,以便将他们的数据与多个设备同步。
如何为“匿名”用户获取唯一标识符?我知道有一个方法,比如.push().getKey()
从实时数据库中获取一个uid,但是我可以在哪里将这个密钥存储在设备上?
我还在使用firebase身份验证,因此当人们使用他们的Google帐户访问该应用时,我可以使用来自firebase身份验证的Uid。在firebase身份验证中还有一个匿名用户选项,但我不想这样做,因为这只会临时存储数据。
答案 0 :(得分:1)
你混淆了两件事:
push()
的方法,可生成统计上保证唯一的ID。这两个值彼此没有关系。
如果要识别用户,请使用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
。