Я использую FirebaseUI
для аутентификации. Это мой простой SignInActivity
. Начинается MainActivity
после успешного входа. Процесс входа работает нормально (Запросить вход> вход> show MainActivity
). Но когда я выхожу из MainActivity
, из ниоткуда он снова просит войти (показывает Auth UI, вызывая stateChange
). Насколько я понимаю, если SignInActivity
уже закончил, SignOut()
не должен делать ничего, кроме выхода. Откуда этот зомб ie звонок?
Мои наблюдения: Работает нормально, когда я mFirebaseAuth.addAuthStateListener(this)
и реализую интерфейс. Что плохого в обратном вызове в методе?
public class SignInActivity extends AppCompatActivity {
private static final int RC_SIGN_IN = 1;
private FirebaseAuth mFirebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
mFirebaseAuth = FirebaseAuth.getInstance();
}
@Override
protected void onResume() {
super.onResume();
mFirebaseAuth.addAuthStateListener(this::stateChange);
}
@Override
protected void onPause() {
super.onPause();
mFirebaseAuth.removeAuthStateListener(this::stateChange);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "signed in", Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "signed in cancel", Toast.LENGTH_SHORT).show();
finish();
}
}
}
public void stateChange(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// user has signed in, finish this and go to main screen
startActivity(new Intent(SignInActivity.this, MainActivity.class));
finish();
} else {
// user has not signed in, show sign in
startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.setIsSmartLockEnabled(false, true)
.setAvailableProviders(Arrays.asList(
new AuthUI.IdpConfig.GoogleBuilder().build(),
new AuthUI.IdpConfig.EmailBuilder().build()))
.build(), RC_SIGN_IN);
}
}
}
Код выхода MainActivity для menu
:
AuthUI.getInstance().signOut(this); // just this single line, no finish() or anything