我正在开发一个使用Firebase的Android应用程序并登录我使用Google登录。
我想存储有关用户的额外信息,例如email
,name
和其他信息。< br />为此我在Firebase上创建了一个名为users
的独立分支,当用户成功登录时,我将这些信息写入该分支。
这种方法适用于用户名和密码,因为 SignUp 和 SignIn 分别使用不同的方法管理。
相反,使用Google身份验证,如果我正确,我只能登录(第一次登录就像注册一样)。
Firebase authentication with Google
我通过在方法updateUI()
内调用(在Google SignIn成功时调用)来应用Firebase文档中提供的示例,其中定义了以下方法:
void addUser(User user) {
databasereference.child(USERS).child(user.getuserid()).setvalue(user);
}
其中databasereference
是我的数据库的根。所以updateUI方法应如下所示:
void updateUI(FirebaseUser user) {
if(user != null) {
User myUser = new User(user.getDisplayName(), user.getEmail(), user.getUid());
addUser(myUser);
}
}
如果它是正确的,我不知道如何处理这种情况:
在这种情况下,显然我会覆盖所有以前的信息,因为我再次调用方法addUser()
而没有任何检查。
同时,我认为在{{下使用一个监听器1}}分支(和特定users
)不正确,因为我必须下载有关单个用户的所有信息。
第二次登录Google时是否存在管理方式?
在我使用的方法是正确的情况下,在登录时检查用户是否存在的唯一方法是从我的userId
&#39;中下载他的信息。分支还是有另一种方式?我可以做什么类型的检查?
答案 0 :(得分:1)
假设您有一个如下所示的数据库:
Firebase-root
|
--- users
|
--- uid1
|
--- uid2
要检查用户的existens,您需要在users
节点上附加一个监听器并使用exists()
方法,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("users").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {
//Create user
} else {
//Do something else
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
userRef.addListenerForSingleValueEvent(eventListener);
其中uid
是您要检查的用户的ID(如果存在)。