【问题标题】:User logs out every time app is closed - Firebase Authentication - Android Studio (Java)每次应用关闭时用户注销 - Firebase 身份验证 - Android Studio (Java)
【发布时间】:2020-08-30 21:19:03
【问题描述】:

我的 android 应用程序使用 firebase 身份验证。一旦用户登录并在应用程序中,getCurrentUser() 不为空,这很好。但是,一旦用户关闭应用程序,他们就不会保持登录状态。

这是我的代码:

public class login extends AppCompatActivity {

EditText email, password;
Button signIn, toSignUp;
FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
FirebaseUser firebaseUser;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    email = findViewById(R.id.insertemail);
    password = findViewById(R.id.checkpassword);
    signIn = findViewById(R.id.signIn);
    toSignUp = findViewById(R.id.toSignUp);
    mFirebaseAuth = FirebaseAuth.getInstance();
    mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser mFireBaseUser = mFirebaseAuth.getCurrentUser();
            if (mFirebaseAuth.getCurrentUser() != null) {
                Toast.makeText(login.this, "You are logged in!", Toast.LENGTH_SHORT).show();
                Intent inte = new Intent(login.this, MapsActivity.class);
                startActivity(inte);
            } else {
                Toast.makeText(login.this, "Please log in", Toast.LENGTH_SHORT).show();
            }
        }
    };
    signIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String em = email.getText().toString();
            String pass = password.getText().toString();
            if (em.isEmpty()) {
                email.setError("Please enter your Email ID");
                email.requestFocus();
            } else if (pass.isEmpty()) {
                password.setError("Please enter you Password");
                password.requestFocus();
            } else if (em.isEmpty() && pass.isEmpty()) {
                Toast.makeText(login.this, "Fields are empty!", Toast.LENGTH_SHORT).show();
            } else if (!(em.isEmpty() && pass.isEmpty())) {
                mFirebaseAuth.signInWithEmailAndPassword(em, pass).addOnCompleteListener(login.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            Toast.makeText(login.this, "Log in Failed. Please try again!", Toast.LENGTH_SHORT).show();
                        } else {
                            Intent inten = new Intent(login.this, MapsActivity.class);
                            startActivity(inten);
                        }
                    }
                });
            } else {
                Toast.makeText(login.this, "Error Occurred!", Toast.LENGTH_SHORT).show();
            }
        }
    });
    toSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(login.this, signup.class);
            startActivity(intent);
        }
    });
}
}

为什么每次关闭应用时mFirebaseAuth.getCurrentUser()为null?

提前感谢您的帮助!

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    当前用户在应用冷启动时为空,因为确定该用户是否有效需要时间(和网络连接)。 Firebase 不会阻止应用程序的启动来确定用户是否有效。它会让你的代码尽快运行。只要 SDK 确定用户有效,就会调用您提供的 AuthStateListener 回调。

    如果您想确定用户在应用程序启动时是登录还是退出,您应该等待第一个回调到侦听器。在那之前,用户的登录状态是未知的,在此之前显示一个微调器或其他一些等待屏幕可能是有意义的。

    【讨论】:

    • 我有点困惑你所说的“等待第一个回调给监听器”的意思。能解释一下就好了
    • 我的意思是在第一次调用回调之前不要对要做什么做出任何决定,因为这可能需要未知的时间才能发生。
    • 实际上我只是注意到您的身份验证状态侦听器甚至从未使用addAuthStateListener 添加。在你这样做之前它永远不会被调用。
    • 我应该在哪里添加 addAuthStateListener?我认为 mAuthStateListener = new FirebaseAuth.AuthStateListener() 足以添加 AuthStateListener
    • 这只是声明了监听器。使用我上面链接的 API 声明后,您需要添加到某处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2018-12-29
    • 2017-05-24
    • 2017-04-11
    相关资源
    最近更新 更多