2017-01-09 93 views
0

我是Android和Firebase的新手,我正嘗試在其中創建一個包含登錄界面的應用程序。一旦用戶登錄,應用程序會根據用戶的用戶類型將他/她引導至特定的屏幕。我將有3種用戶類型:AdminDriverBus dispatcherFirebase身份驗證取決於自定義用戶類型

你有什麼想法如何得到這個工作? 我正在創建一個頂點項目,我真的需要一些幫助。

直到現在我還沒有編寫任何代碼。

期待您的想法和建議,謝謝。

回答

1

讓您的用戶在註冊時選擇他們想要的用戶類型。將該值寫入Firebase數據庫中該用戶的對象。例如:

$UniqueUID: 
    name: "John Doe" 
    userType: "Driver" 

當用戶登錄時,在你的MainActivity,檢查其中的用戶類型已經登錄,例如:

if(userType.equals("Driver")){ 
    //Load the Driver screen 
} 

現在很明顯,上面的例子是相當粗糙。您需要爲具有特定用戶數據的子級設置偵聽器,並從中檢索DataSnapshot。然後你可以比較它並執行必要的代碼。

0

假設你有一個類似的火力結構:

  • 用戶
  • -userUID
  • --attributes ...
  • --type

這意味着你將有一個合適的用戶.java模型反映了來自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); 
    } 
} 
+0

我想知道我的用戶.class看起來像?即時通訊仍然卡住需要幫助 –

+0

Bro它的這一個 –

相關問題