Как мне go вернуться к MainActivity после успешного входа? - PullRequest
0 голосов
/ 30 апреля 2020

После успешного входа в систему это возвращается к Main2Activity, и я могу войти снова и снова. Но запустите приложение снова после закрытия и удаления из недавнего списка, оно запускается в MainActivity. как напрямую перейти от Main2Activity к MainActivity после того, как условие выполнено.

Код Main2Activity

public class Main2Activity extends AppCompatActivity {

    private static final String TAG = "Main2Activity";
    int AUTHUI_REQUEST_CODE = 1001;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        if (FirebaseAuth.getInstance().getCurrentUser() != null) {
            startActivity(new Intent(this, MainActivity.class));
            this.finish();
        }
    }

    public void loginRegister(View view) {

        List<AuthUI.IdpConfig> providers = Arrays.asList(
                new AuthUI.IdpConfig.EmailBuilder().build(),
                new AuthUI.IdpConfig.GoogleBuilder().build(),
                new AuthUI.IdpConfig.PhoneBuilder().build()
        );

        Intent intent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls("https://example.com","https://example.com")
                .setLogo(R.drawable.i789)
                .build();

        startActivityForResult(intent, AUTHUI_REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == AUTHUI_REQUEST_CODE){
            if (requestCode == RESULT_OK){
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                Log.d(TAG, "onActivityResult: "+ user.getEmail());
                if (user.getMetadata().getCreationTimestamp() == user.getMetadata().getLastSignInTimestamp()){
                    Toast.makeText(this, "Welcome", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(this, "Welcome back again", Toast.LENGTH_SHORT).show();
                }
            Intent t = new Intent(this,MainActivity.class);
             startActivity(t);
             this.finish();

        }else{
                IdpResponse response =IdpResponse.fromResultIntent(data);
                if (response == null){
                    Log.d(TAG, "onActivityResult: the user has cancelled the sign in request");
                }else {
                    Log.e(TAG, "onActivityResult: ",response.getError() );
                }

            }
        }
    }
}

code- Main Activity

public class MainActivity extends AppCompatActivity implements FirebaseAuth.AuthStateListener {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

        private void startLogin(){
                Intent intent = new Intent(this,Main2Activity.class);
                startActivity(intent);
                finish();
        }

    public void signout(View view){
     AuthUI.getInstance().signOut(this);

    }

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseAuth.getInstance().addAuthStateListener(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        FirebaseAuth.getInstance().removeAuthStateListener(this);
    }

    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        if (firebaseAuth.getCurrentUser() == null){
            startLogin();
            return;
        }
        firebaseAuth.getCurrentUser().getIdToken(true)
                .addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
                    @Override
                    public void onSuccess(GetTokenResult getTokenResult) {
                        Log.d(TAG, "onSuccess: "+getTokenResult.getToken());
                    }
                });
    }
}

1 Ответ

1 голос
/ 30 апреля 2020

Я предлагаю вам создать экран spla sh (начальный экран), который первоначально при запуске проверит аутентификацию независимо от того, вошел пользователь в систему или нет с сервера. Все это будет обрабатываться в фоновом потоке, и поток пользовательского интерфейса будет выполнять анимацию экрана spla sh (если вы используете sh). Поэтому, если пользователь вошел в систему, вы переходите к mainActivity, в противном случае переходите к loginActivity. Надеюсь, это поможет вам.

...