繁体   English   中英

在应用中一次性登录 - FirebaseAuth

[英]One time login in app - FirebaseAuth

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

实现这一点的最简单方法是使用侦听器。 假设您有两个活动, 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()中的更改。

在这两个活动中,不要忘记在不再需要的那一刻删除侦听器。 因此,在您的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 或登录页面)使用此

 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<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();
            }
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM