一次登录应用程序 - FirebaseAuth

时间:2018-06-16 07:28:40

标签: java android firebase firebase-authentication

我正在开发一款使用Firebase身份验证通过电话号码登录用户的应用。我想添加一个功能,只有一次登录用户,即使用户杀死应用程序并再次启动它,他应该登录。另外,我不想添加注销功能。可以做些什么?

3 个答案:

答案 0 :(得分:7)

实现此目的的最简单方法是使用侦听器。假设您有两项活动,LoginActivityMainActivity。可以在LoginActivity中创建的侦听器应如下所示:

FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
        if (firebaseUser != null) {
            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }
};

这基本上意味着如果用户已登录,请跳过LoginActivity并转到MainActivity

实例化FirebaseAuth对象:

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();

然后开始聆听onStart()方法中的更改:

@Override
protected void onStart() {
    super.onStart();
    firebaseAuth.addAuthStateListener(authStateListener);
}

MainActivity中,你应该做同样的事情:

FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
        if (firebaseUser == null) {
            Intent intent = new Intent(MainActivity.this, LoginActivity.class);
            startActivity(intent);
        }
    }
};

这基本上意味着如果用户未登录,请跳过MainActivity并转到LoginActivity。在此活动中,您应该执行与LoginActivity相同的操作,您应该开始在onStart()中收听更改。

在这两个活动中,不要忘记在不再需要的时刻删除监听器。因此,在onStop()方法中添加以下代码行:

@Override
protected void onStop() {
    super.onStop();
    firebaseAuth.removeAuthStateListener(authStateListener);
}

答案 1 :(得分:2)

您可以在共享首选项中保存用户登录会话

登录成功登录后执行此操作

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.commit();

当您的应用程序启动时(如Splash或登录页面),请使用此

 SharedPreferences sp=this.getSharedPreferences("MyPref", Context.MODE_PRIVATE);
  boolean b = sp.getBoolean("key_name", false);
if(b==true){
//User Already Logged in skip login page and continue to next process
}else{
//User is Not logged in, show login Form
}

它适用于你。

答案 2 :(得分:0)

这来自我记录类的工作代码:

   private void LoginUserAccount(String email, String password)
{
    if (TextUtils.isEmpty(email))
    {
        Toast.makeText(ResponseStartPage.this, "Please write Your Email", Toast.LENGTH_SHORT).show();
    }
    if (TextUtils.isEmpty(password))
    {
        Toast.makeText(ResponseStartPage.this, "Please write Your password", Toast.LENGTH_SHORT).show();
    }

    else
    {
        loadingBar.setTitle("Login Account");
        loadingBar.setMessage("Please wait for verification...");
        loadingBar.show();
        mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task)
            {
                if (task.isSuccessful())
                {
                    String online_user_id = mAuth.getCurrentUser().getUid();
                    String DeviceToken = FirebaseInstanceId.getInstance().getToken();

                    usersReference.child(online_user_id).child("device_token").setValue(DeviceToken)
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid)
                                {
                                    Intent mainIntent = new Intent(ResponseStartPage.this, ResponseMainActivity.class);
                                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                    startActivity(mainIntent);
                                    finish();
                                }
                            });


                }
                else
                {
                    Toast.makeText(ResponseStartPage.this, "Please Check your email and password", Toast.LENGTH_SHORT).show();
                }
                loadingBar.dismiss();
            }
        });
    }
}