我有Firebase AuthStateListener
的SignInActivity。
final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
final FirebaseAuth.AuthStateListener firebaseAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(FirebaseAuth auth) {
FirebaseUser user = auth.getCurrentUser();
if (user != null && user.isEmailVerified()) {
firebaseAuth.removeAuthStateListener(this);
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
}
};
firebaseAuth.addAuthStateListener(firebaseAuthListener);
当我成功注册一个新帐户时,我setVisibity(View.Visible)
一个带有EditTextEmail
&的验证页面活动内VerifyButton
(如果有人想重新发送电子邮件验证)。
我想要做的是当我从我的电子邮件帐户验证我的电子邮件时,我希望该页面自动启动MainActivity
,而不是仅仅在我的LoginActivity
中保持闲置状态,例如短信验证,在短信中收到验证码,该应用会读取短信并导航至MainActivity
。是否可以通过电子邮件验证实现此目的?因为即使点击了我的电子邮件中的验证链接,FirebaseAuthState
也从未改变过。
我需要像OnFirebaseAuthUserEmailVerifiedListener
我是firebase的新手,请告诉我如何实现这个目标或者如果不可能的话。
答案 0 :(得分:2)
This link非常有用。
因为即使点击了我的电子邮件中的验证链接,FirebaseAuthState也从未改变过。
那是因为用户已缓存,您需要重新加载用户:
请注意,FirebaseUser对象会在应用会话中缓存,因此,如果您想要检查用户的验证状态,最好拨打
.getCurrentUser().reload()
进行更新。
答案 1 :(得分:0)
你需要这样的东西
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user.isEmailVerified())
{
// user is verified, so you can finish this activity or send user to activity which you want.
finish();
Toast.makeText(LoginActivity.this, "Successfully logged in", Toast.LENGTH_SHORT).show();
}
else
{
// email is not verified, so just prompt the message to the user and restart this activity.
sendVerificationEmail();
}
}
获取 email验证
的方法private void sendVerificationEmail(){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.sendEmailVerification()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
// email sent
// after email is sent just logout the user and finish this activity
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(SignupActivity.this, LoginActivity.class));
finish();
}
else{
// email not sent, so display message and restart the activity or do whatever you wish to do
}
}
});
}
希望这会对你有所帮助。