2017-10-05 53 views
0

我有一個與Firebase AuthStateListener簽署活動。Android Firebaase AuthStateListener電子郵件已驗證

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

我新的火力點,請您給我建議就如何實現這一目標,或者如果它是不可能的。

回答

0

This link真的很有用。

由於FirebaseAuthState從來沒有改變,即使我點擊了我的電子郵件上的驗證鏈接。

這是因爲用戶被緩存,你需要重新加載用戶:

請注意,FirebaseUser對象是一個應用程序會話中緩存,所以如果你想檢查驗證狀態的用戶,最好致電.getCurrentUser().reload()進行更新。

+0

我應該在哪裏調用我的reload()方法? –

+0

如果在電子郵件驗證之前您不允許進行任何操作,則可以進行自旋循環,即'while(!user.isEmailVerified()){mAuth.getCurrentUser()。reload(); }',如果您甚至可以通過未經驗證的電子郵件瀏覽您的應用程序,則可以添加例如帶有刷新按鈕的Snackbar,該按鈕調用'reload()'方法 – Century

+0

感謝您的建議。我將添加Snackbar來刷新用戶身份驗證。 –

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

} 

}

和方法得到emailVerification

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 




        } 
       } 
      }); 
} 

希望這有助於你。

+0

我想你真的不明白我的問題。 –