2017-10-05 5 views
0

FirebaseでSignInActivityを持っていますAuthStateListener。私は成功した新しいアカウントを登録しAndroid Firebase AuthStateListener Email Verified

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

、I setVisibity(View.Visible)(誰かが電子メールの検証を再送信したい場合には)アクティビティ内EditTextEmail & VerifyButtonと検証ページ。

私がしたいことは、電子メールアカウントから自分の電子メールを確認したときに、SMSで確認コードが受信されたときに、LoginActivityにアイドル状態を維持する代わりに自動的にMainActivityアプリはSMSを読み取り、MainActivityにナビゲートします。電子メールによる検証でこれを達成することは可能ですか?私のメールで確認リンクをクリックしても、FirebaseAuthStateは変更されていないためです。私はfirebaseに新たなんだ

OnFirebaseAuthUserEmailVerifiedListenerようなものが必要

は、親切に私にこれを達成するためにどのようにかそれが不可能な場合はアドバイスをお願いします。

答えて

0

This linkは本当に便利です。

私のメールで確認リンクをクリックしても、FirebaseAuthStateが変更されていないためです。

あなたが検証状態を確認したいので、もし、FirebaseUserオブジェクトは、アプリケーションのセッション内でキャッシュされていることに注意してください:ユーザーがキャッシュされるためだ、とあなたがユーザーを再ロードする必要が

更新のために.getCurrentUser().reload()に電話をかけることをお勧めします。

+0

私はreload()メソッドをどこで呼び出すべきですか? –

+0

電子メールが確認されるまで何もすることを許可しない場合、スピンループすることができます。つまり、 'while(!user.isEmailVerified()){mAuth.getCurrentUser()。reload(); } '、未確認の電子メールであってもアプリをナビゲートすることができる場合は、例えば' reload() 'メソッドを呼び出す更新ボタンを使ってSnackbarを追加することができます – Century

+0

ありがとうございました。 Snackbarを追加してユーザー認証を更新します。 –

0

あなたが希望これはあなたを助け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 




        } 
       } 
      }); 
} 

を取得するには、この

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

} 

}

そして法のようなものを必要としています。

+0

あなたは本当に私の質問を理解していないと思います。 –

関連する問題