首页 > 解决方案 > 一次性登录应用 - FirebaseAuth

问题描述

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

标签: javaandroidfirebasefirebase-authentication

解决方案


实现这一点的最简单方法是使用监听器。假设您有两个活动,theLoginActivityMainActivity. 可以在 中创建的侦听器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);
}

推荐阅读