Google Firebase在Android应用中注销并忘记用户

Gra*_*lov 23 android firebase google-play-services firebase-authentication

当我打电话mFirebaseAuth.signOut()mFirebaseUser.delete()我的FirebaseAuth.AuthStateListener()作品正确并nullFirebaseUser实例形式返回时onAuthStateChanged,我刷新UI并显示"使用Google登录"按钮.

但是当我想再次登录时,我看不到用户弹出窗口(我的设备上有2个用户,附加了图像).该应用仅在首次登录时显示此弹出窗口,之后它使用相同的用户.如果我在设置屏幕上清除应用程序的数据,我将能够再次看到此弹出窗口.

我的问题是如何在每次退出后显示此弹出窗口.

在此输入图像描述

我按下登录按钮时运行此代码:

// in onCreate()
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();

// in OnClickListener
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN);
Run Code Online (Sandbox Code Playgroud)

onActivityResult(),我得到一个实例,GoogleSignInResult所以我打电话后需要的一切startActivityForResult().

Bob*_*der 41

Firebase Auth Quickstart示例代码中,Google提供商的退出包括以下步骤.你GoogleSignInClient.signOut()在退出时打电话了吗?

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

    // Google sign out
    mGoogleSignInClient.signOut().addOnCompleteListener(this,
            new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    updateUI(null);
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

  • 我如何获得`mGoogleApiClient`?什么`updateUI`做什么?我如何用Facebook做到这一点?我已在一个单独的课程中注销.谢谢 (5认同)

Sha*_*arp 10

我很困惑,因为所有解决方案都需要引用GoogleSignInClient,但实际上您不需要持有对它的引用,您可以简单地创建一个新实例并调用signOut()它。

GoogleSignIn.getClient(
    getContext(), 
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build()
).signOut();
Run Code Online (Sandbox Code Playgroud)


Zoo*_*ooS 9

另一种选择是使用FirebaseUI库.某种意义上说,它可以简化登录注销操作,它将为您完成所有繁重的工作.

科特林

AuthUI.getInstance().signOut(this).addOnCompleteListener { 
    // do something here 
}
Run Code Online (Sandbox Code Playgroud)

Java的

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

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

              // do something here

          }
      });
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


归档时间:

查看次数:

23330 次

最近记录:

6 年,4 月 前