一次登录应用程序 – FirebaseAuth

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

实现此目的的最简单方法是使用侦听器。 假设您有两个活动, LoginActivityMainActivity 。 可以在LoginActivity创建的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相同的LoginActivity ,您应该开始侦听onStart()中的更改。

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

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

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

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

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

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

  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 } 

它适合你。

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

  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() { @Override public void onComplete(@NonNull Task 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() { @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(); } }); } }