Google Firebase выйти и забыть пользователя в Android-приложении


Когда я вызываю mFirebaseAuth.signOut() или mFirebaseUser.delete() Мой FirebaseAuth.AuthStateListener() работает правильно и возвращает null как FirebaseUser экземпляр в onAuthStateChanged, я обновляю пользовательский интерфейс и показываю кнопку "Войти с помощью Google".

Но когда я хочу войти снова, я не вижу всплывающего окна с пользователями (у меня есть 2 пользователя на моем устройстве, прикрепил изображение). Приложение показывает это всплывающее окно только при первом входе, после чего оно использует того же пользователя. Если я очищу данные приложения на экране настроек, я смогу снова увидеть это всплывающее окно.

Мой вопрос в том, как показать это всплывающее окно после каждого выхода.

Введите описание изображения здесь

Я запускаю этот код, когда нажимаю кнопку входа:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN);

В onActivityResult() я получаю экземпляр GoogleSignInResult, поэтому все, что мне нужно, происходит после вызова startActivityForResult().

6 12

6 ответов:

В Firebase Auth Quickstart sample code, выход для поставщика Google включает в себя следующие шаги. Вы звоните Auth.GoogleSignInApi.signOut() , когда выходите из системы?

private void signOut() {
    // Firebase sign out
    mAuth.signOut();

    // Google sign out
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    updateUI(null);
                }
            });
}

Для всех, кто хочет получить этот результат (например, вернуть параметры аккаунта google) в другой деятельности.

public static void signOut() {
    // Firebase sign out
    mAuth.signOut();

    // Google sign out
    Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}

Добавьте это на странице входа и, прежде чем перейти к следующему действию, просто позвоните SignOut().

// everything ok...             
signOut();
startActivity(new Intent(SignIn.this,NextOne.class));

И затем, в другом классе вы можете вызвать

FirebaseAuth.getInstance().signOut();
startActivity(new Intent(NextClass.this, SignIn.class));

Это легко, и это будет работать. Ура!

Другой вариант заключается в использовании FirebaseUI Библиотека. Это упрощает операцииsign in иsign out в том смысле, что это сделает всю тяжелую работу за вас.

Котлин

AuthUI.getInstance().signOut(this).addOnCompleteListener { 
    // do something here 
}

Java

AuthUI.getInstance()
      .signOut(ActivityMainOld.this)
      .addOnCompleteListener(new OnCompleteListener<Void>(){

          @Override
          public void onComplete(@NonNull Task<Void> task) {

              // do something here

          }
      });

Надеюсь, это поможет

Вы также можете определить что-то вроде этого:

private void signOut() {
    mAuth.signOut();
    mGoogleSignInClient.signOut().addOnCompleteListener(this,
            new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Intent intent = new Intent(YourActivity.this, NextActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                }
            });
}
private void sendToLogin() { //funtion
    GoogleSignInClient mGoogleSignInClient ;
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();
    mGoogleSignInClient = GoogleSignIn.getClient(getBaseContext(), gso);
    mGoogleSignInClient.signOut().addOnCompleteListener(/*CURRENT CLASS */.this,
        new OnCompleteListener<Void>() {  //signout Google
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                FirebaseAuth.getInstance().signOut(); //signout firebase
                Intent setupIntent = new Intent(getBaseContext(), /*To ur activity calss*/);
                Toast.makeText(getBaseContext(), "Logged Out", Toast.LENGTH_LONG).show(); //if u want to show some text
                setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(setupIntent);
                finish();
            }
        });
}

Этот код написан для работы в качестве копии прошедшего только что прочитанного комментария в коде, чтобы настроить его под нужды ur, я предпочитаю отправлять пользователю login

Я сделал mGoogleSignInClient.signOut() это работает, как и ожидалось.