Android 识别具有相同电子邮件地址的两个用户

Android 识别具有相同电子邮件地址的两个用户,android,firebase,Android,Firebase,我目前正在开发一个家长控制应用程序,我想实现的是家长和孩子可以在不同的设备上使用相同的电子邮件地址登录系统,我还想实现自动登录功能,当家长打开应用程序时,它将直接加载ParentActivity,如果是child,则加载ChildActivity 但现在的问题是,我不能这样做,我不知道如何识别他们,因为他们使用相同的电子邮件地址。以前,我可以使用FirebaseAuth.getCurrentUser()为父级执行自动登录,然后检查firestore中的用户类型。但是现在我无法检查任何东西来确定用

我目前正在开发一个家长控制应用程序,我想实现的是家长和孩子可以在不同的设备上使用相同的电子邮件地址登录系统,我还想实现自动登录功能,当家长打开应用程序时,它将直接加载ParentActivity,如果是child,则加载ChildActivity

但现在的问题是,我不能这样做,我不知道如何识别他们,因为他们使用相同的电子邮件地址。以前,我可以使用FirebaseAuth.getCurrentUser()为父级执行自动登录,然后检查firestore中的用户类型。但是现在我无法检查任何东西来确定用户是孩子还是家长

我所尝试的:

  • 创建一个字段调用“child”,当用户(John)以child身份登录时,用“TRUE”更新该字段(比方说),当John退出应用程序并再次登录时,系统将开始检查userType==“parents”,如果否,则仅检查child==“TRUE”。因此,子用户将始终自动登录到ParentActivity,而不是ChildActivity
  • 有没有办法做到这一点?希望你们明白我的问题是什么。附件中的图片显示了我以前如何为家长实现自动登录。提前谢谢

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    
        // Transparent Status Bar
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    
        ButterKnife.bind(this);
    
        //FirebaseApp.initializeApp(this.getBaseContext());
        firebaseAuth = FirebaseAuth.getInstance();
        clearUserType();
    }
    
    // Hide keyboard after user clicking somewhere
    public boolean onTouchEvent(MotionEvent event) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.
                INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }
    
    @OnClick(R.id.LoginButton)
    public void login(){
        progressBar.setVisibility(View.VISIBLE);
        if (!Utils.isValidEmail(email, emailLayout) | !Utils.hasEmail(email, emailLayout) | !Utils.hasPassword(password, passwordLayout)){
            progressBar.setVisibility(View.INVISIBLE);
            return;
        }
        startSignIn(email.getText().toString(), password.getText().toString());
    }
    
    @OnClick(R.id.SignUpButton)
    public void signUpScreen(){
        Intent signup = new Intent(this, SignUpActivity.class);
        startActivity(signup);
        finish();
    }
    
    @OnTextChanged(value = R.id.LoginEmailText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    public void emailChanged(CharSequence s){
        if(!(s.length() < 1)){
            emailLayout.setError(null);
        }
    }
    
    @OnTextChanged(value = R.id.LoginPasswordText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    public void passwordChanged(CharSequence s){
        if(!(s.length() < 1)){
            passwordLayout.setError(null);
        }
    }
    
    private void startSignIn(String email, String password){
        firebaseAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(task -> {
                    try {
                        if (task.isSuccessful()) {
                            updateUI();
                        }
                        else {
                            String error = task.getException().getMessage();
                            if (error.contains("There is no user record corresponding to this identifier. The user may have been deleted.") ||
                                error.contains("The password is invalid or the user does not have a password."))
                            {
                                Utils.ErrorSweetDialog(LoginActivity.this, "Login Failed", "Incorrect email or pasword. Please try again.",
                                        "OK");
                            }
                            else if (error.contains("A network error (such as timeout, interrupted connection or unreachable host) has occurred.")){
                                Utils.ErrorSweetDialog(LoginActivity.this, "No Internet Connection",
                                        "Please check your internet connection and try again.", "OK");
                            }
                            else
                            {
                                Utils.ErrorSweetDialog(LoginActivity.this, "Login Failed", error, "OK");
                            }
                        }
                        progressBar.setVisibility(View.INVISIBLE);
                    }
                    catch (Exception e){
                        Utils.ErrorSweetDialog(LoginActivity.this, "Oops! Something went wrong.",
                                "Sorry for the inconvenience. Please try again later.", "OK");
                    }
                });
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        //clearUserType();
        //FirebaseUser user = firebaseAuth.getCurrentUser();
        /*DocumentReference docRef = db.collection("UserInfo").document(uid); //ZJkUy7J5UzTok7ioADAYqk77Opp1
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if(task.isSuccessful()){
                    DocumentSnapshot document = task.getResult();
                    if(document.exists()){
                        String userType = document.getString("userType");
                        Log.e("LoginActivity",userType);
                    }
                }
                else{
    
                }
            }
        });*/
    
        /*if(user != null){
            //updateUI();
            String uid = firebaseAuth.getCurrentUser().getUid();
            DocumentReference docRef = db.collection("UserInfo").document(uid); //ZJkUy7J5UzTok7ioADAYqk77Opp1
            docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if(task.isSuccessful()){
                        DocumentSnapshot document = task.getResult();
                        if(document.exists()){
                            String userType = document.getString("userType");
                            Log.e("LoginActivity",userType);
                            if (userType.contains("parents")){
                                Log.e("contain parents", "yes");
                                Intent intent = new Intent(getApplicationContext(), ParentActivity.class);
                                startActivity(intent);
                                finish();
                            }
                            else{
    
                            }
                        }
                    }
                    else{
    
                    }
                }
            });
            Intent intent = new Intent(this, ParentActivity.class);
            startActivity(intent);
            finish();
        }
        else{
            Log.e("Login", "hi");
        }*/
    }
    
    private void updateUI(){
        Intent intent = new Intent(this, PickRoleActivity.class);
        startActivity(intent);
        finish();
    }
    
    private void clearUserType(){
        FirebaseUser user = firebaseAuth.getCurrentUser();
        //Log.e("urrent user", user.toString());
        if(user != null){
            progressBar.setVisibility(View.VISIBLE);
            Log.e("user null: ", "no");
            //updateUI();
            String uid = firebaseAuth.getCurrentUser().getUid();
            Log.e("UID: ",uid);
            DocumentReference docRef = db.collection("UserInfo").document(uid); //ZJkUy7J5UzTok7ioADAYqk77Opp1
            docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if(task.isSuccessful()){
                        DocumentSnapshot document = task.getResult();
                        if(document.exists()){
                            String userType = document.getString("userType");
                            String childStatus = document.getString("child");
                            Log.e("LoginActivity",userType);
                            if (userType.contains("parents")){
                                Log.e("contain parents", "yes");
                                progressBar.setVisibility(View.INVISIBLE);
                                Intent intent = new Intent(getApplicationContext(), ParentActivity.class);
                                startActivity(intent);
                                finish();
                            }
                            else if (childStatus.contains("TRUE")){
                                progressBar.setVisibility(View.INVISIBLE);
                            }
                        }
                    }
                    else{
                        Log.e("task unsuccessful:", " yes");
                    }
                }
            });
        }
        else{
            Log.e("NULL: ", "No Such User.");
        }
    }
    
    @覆盖
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u登录);
    //透明状态栏
    View decorView=getWindow().getDecorView();
    decorView.设置系统兼容性(View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_全屏);
    把(这个)绑起来;
    //FirebaseApp.initializeApp(this.getBaseContext());
    firebaseAuth=firebaseAuth.getInstance();
    clearUserType();
    }
    //用户单击某个位置后隐藏键盘
    公共布尔onTouchEvent(运动事件){
    InputMethodManager imm=(InputMethodManager)getSystemService(上下文)。
    输入\方法\服务);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
    返回true;
    }
    @OnClick(R.id.LoginButton)
    公共无效登录(){
    progressBar.setVisibility(View.VISIBLE);
    如果(!Utils.isValidEmail(电子邮件,emailLayout)|!Utils.hasEmail(电子邮件,emailLayout)|!Utils.hasPassword(密码,passwordLayout)){
    progressBar.setVisibility(View.INVISIBLE);
    返回;
    }
    startSignIn(email.getText().toString()、password.getText().toString());
    }
    @OnClick(R.id.SignUpButton)
    公共屏幕{
    意向注册=新意向(此为SignUpActivity.class);
    startActivity(注册);
    完成();
    }
    @OnTextChanged(value=R.id.LoginEmailText,callback=OnTextChanged.callback.AFTER\u TEXT\u CHANGED)
    已更改公共无效电子邮件(字符序列){
    如果(!(s.长度()<1)){
    emailLayout.setError(空);
    }
    }
    @OnTextChanged(value=R.id.LoginPasswordText,callback=OnTextChanged.callback.AFTER\u TEXT\u CHANGED)
    公共无效密码已更改(字符序列){
    如果(!(s.长度()<1)){
    passwordLayout.setError(null);
    }
    }
    私有void startSignIn(字符串电子邮件、字符串密码){
    firebaseAuth.使用电子邮件和密码登录(电子邮件,密码)
    .addOnCompleteListener(任务->{
    试一试{
    if(task.issusccessful()){
    updateUI();
    }
    否则{
    字符串错误=task.getException().getMessage();
    if(error.contains)(“没有与此标识符对应的用户记录。该用户可能已被删除。”)||
    error.contains(“密码无效或用户没有密码。”)
    {
    Utils.ErrorSweetDialog(LoginActivity.this,“登录失败”,“电子邮件或密码不正确。请重试。”,
    “OK”);
    }
    else if(error.contains(“发生了网络错误(如超时、连接中断或无法访问主机)。){
    Utils.ErrorSweetDialog(LoginActivity.this,“无互联网连接”,
    “请检查您的internet连接,然后重试。”,“确定”);
    }
    其他的
    {
    Utils.ErrorSweetDialog(LoginActivity.this,“登录失败”,错误,“确定”);
    }
    }
    progressBar.setVisibility(View.INVISIBLE);
    }
    捕获(例外e){
    Utils.ErrorSweetDialog(LoginActivity.this,“哎呀!出了点问题。”,
    “很抱歉给您带来不便。请稍后再试。”,“好”);
    }
    });
    }
    @凌驾
    受保护的void onStart(){
    super.onStart();
    //clearUserType();
    //FirebaseUser=firebaseAuth.getCurrentUser();
    /*DocumentReference docRef=db.collection(“UserInfo”).document(uid);//ZJkUy7J5UzTok7ioADAYqk77Opp1
    docRef.get().addOnCompletListener(新的OnCompletListener()){
    @凌驾
    未完成的公共void(@NonNull任务){
    if(task.issusccessful()){
    DocumentSnapshot document=task.getResult();
    if(document.exists()){
    字符串userType=document.getString(“userType”);
    Log.e(“LoginActivity”,用户类型);
    }
    }
    否则{
    }
    }
    });*/
    /*如果(用户!=null){
    //updateUI();
    字符串uid=firebaseAuth.getCurrentUser().getUid();
    DocumentReference docRef=db.collection(“UserInfo”).document(uid);//ZJkUy7J5UzTok7ioADAYqk77Opp1
    docRef.get().addOnCompletListener(新的OnCompletListener()){
    @凌驾
    未完成的公共void(@NonNull任务){
    if(task.issusccessful()){
    
       DocumentReference docRef = db.collection("UserInfo").document(uid); //ZJkUy7J5UzTok7ioADAYqk77Opp1
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if(task.isSuccessful()){
                    DocumentSnapshot document = task.getResult();
                    if(document.exists()){
                        String userType = document.getString("userType");
                        Log.e("LoginActivity",userType);
                        if (userType.equal("parents")){
                            Log.e("contain parents", "yes");
                            Intent intent = new Intent(getApplicationContext(), ParentActivity.class);
                            startActivity(intent);
                            finish();
                        }
                        else if (userType.equal("child")) {
                            //Here you missed, when child login
                        }
                    }
                }
    
            }
        });