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 ответов:
В 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