我是Android和Firebase的新手,我正在尝试构建一个带有登录界面的应用程序。一旦用户登录,该应用程序将根据用户用户类型将他/她引导到特定屏幕。我将有3种用户类型:Admin
,Driver
和Bus dispatcher
。
您对如何使其工作有任何想法吗? 我正在创建一个我真正需要帮助的Capstone项目。
直到现在我才编码。
期待您的想法和建议,谢谢。
答案 0 :(得分:1)
让您的用户在注册时选择他们想要的用户类型。将该值写入Firebase数据库中该用户的对象。例如:
$UniqueUID:
name: "John Doe"
userType: "Driver"
当用户登录时,在您的MainActivity中,检查已登录的用户类型。例如:
if(userType.equals("Driver")){
//Load the Driver screen
}
现在显然上面的例子很粗糙。您需要为具有特定用户数据的子项设置一个侦听器,并从中检索DataSnapshot。然后你可以比较它并执行必要的代码。
答案 1 :(得分:0)
假设你有一个类似于此的firebase结构:
根
这意味着您将拥有一个适当的User.java模型,该模型反映了来自firebase的那些属性。
然后你需要在firebase中创建用户,这非常简单。
一旦您的用户在firebase中,您可以使用类似的内容来启动相应的活动(大部分内容直接来自firebase文档)(https://firebase.google.com/docs/auth/android/google-signin)
public static final int ADMIN = 101;
public static final int DRIVER = 102;
public static final int BUS_DISPATCHER= 103;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (user != null) { // User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + firebaseUser.getUid());
FirebaseDatabase.getInstance().getReference().child("users").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
User user = dataSnapshot.getValue(User.class);
int type = user.getType();
switch (type) {
case DRIVER:
launchDriverScreen();
break;
case ADMIN:
launchAdminScreen();
break;
case BUS_DISPATCHER():
launchBusDispatcherScreen();
break;
default:
Log.e(TAG, "unknown user type: " + type);
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else { // User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
}
};
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}