#java #firebase #android-activity #firebase-authentication #firebaseui
#java #firebase #android-активность #firebase-аутентификация #firebaseui
Вопрос:
Я создал небольшое приложение для чата с использованием firebase. Я также реализовал firebaseui для входа в систему. Проблема, с которой я сталкиваюсь, заключается в том, что пользователь не зарегистрировался. Всякий раз, когда приложение запускается, оно должно приводить меня непосредственно к параметрам регистрации FirebaseUI, но то, что происходит с текущим кодом, на миллисекунду показывает макет main activity, а затем переходит к FirebaseUI.
Также, когда я нажимаю кнопку «Назад» перед выходом, она снова показывает мне макет основного действия. Я хочу, чтобы действие было уничтожено и доставило меня домой (Android), но оно показывает мне основную активность в течение миллисекунды, а затем приложение завершает работу.
Почему это происходит?
public class MainActivity extends AppCompatActivity {
private static final int RC_SIGN_IN = 1;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private TextView mUserNameTextView;
private Button mSignOutButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUserNameTextView = (TextView) findViewById(R.id.user_name_text_view);
mSignOutButton = (Button) findViewById(R.id.sign_out_button);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
mUserNameTextView.setText(user.getDisplayName());
} else {
// User is signed out
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()))
.build(),
RC_SIGN_IN);
}
}
};
mSignOutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signOut();
}
});
}
private void signOut() {
FirebaseAuth.getInstance().signOut();
mUserNameTextView.setText("");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
// Sign-in succeeded, set up the UI
Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
// Sign in was canceled by the user, finish the activity
Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
finish();
}
}
}
@Override
protected void onPause() {
super.onPause();
if (mAuthStateListener != null) {
// when app is paused remove the state listener
mAuth.removeAuthStateListener(mAuthStateListener);
}
}
@Override
protected void onResume() {
super.onResume();
// adding the state listener
mAuth.addAuthStateListener(mAuthStateListener);
}
}
Комментарии:
1. вы завершаете действие FirebaseUI?
2. спасибо, что нашли время, чтобы посмотреть на это. У меня есть только main activity (и я не создавал java-файл login activity)
Ответ №1:
Я полагаю, что вы не сможете сделать так, чтобы основное действие не отображалось в течение миллисекунды при запуске приложения, поскольку вы сначала открываете основное действие, а затем перенаправляете его (если я правильно понял).
Однако я могу помочь вам с вашей проблемой, когда вы нажимаете кнопку «Назад».
Добавьте это в свой код FirebaseUI как обычный метод:
@Override
public void onBackPressed() {
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
//replace "CurrentActivity" and "NextActivity" with your activity names
startActivity(intent);
}
При нажатии кнопки «Назад» откроется нужное действие.
Комментарии:
1. Спасибо, но у меня есть только одно действие (основное действие) внутри него, я написал код для пользовательского интерфейса firebase (я слышал, что у FirebaseUI есть своя активность), так что да, почему основное действие отображается, даже когда пользователь не вошел в систему, оно должно напрямую показывать мне параметры регистрации firebaseui
Ответ №2:
Когда вы начинаете новое действие после входа в систему с помощью FirebaseUI, вам нужно завершить (удалит действие из backstack) действие входа в систему при запуске activity.
Intent intent = new Intent(ActivityA.this, NextActivity.class);
startActivity(intent);
finish();
Комментарии:
1.Спасибо, но у меня есть только одно действие (основное действие) внутри него, я написал код для пользовательского интерфейса firebase (я слышал, что у FirebaseUI есть своя активность), так что да, почему основное действие отображается, даже когда пользователь не вошел в систему, оно должно напрямую показывать мне параметры регистрации firebaseui