【问题标题】:How to properly sign out of Facebook on Android with Firebase?如何使用 Firebase 在 Android 上正确退出 Facebook?
【发布时间】:2017-01-18 23:24:33
【问题描述】:

所以我想出了如何正确退出 Google。凉爽的。现在,Facebook 呢?

当我在登录 Facebook 时遇到错误,例如错误提示我已经有一个具有相同凭据但不同社交服务提供商的 Firebase 帐户,我会看到“退出 Facebook”按钮。 为了更清楚:

我尝试登录 Facebook,然后收到错误消息(这不是我的问题!),但问题是,Facebook 的按钮现在处于“注销”状态。什么时候应该仍然“使用 Facebook 登录”。我知道为什么会这样;这是因为 Firebase 出现错误,而 Facebook 认为我已登录。

但真正的问题是,如何正确退出 Facebook? FirebaseAuth.getInstance().signout() 似乎没有退出 Facebook 本身。

这是我当前的logout() 方法:

static void logOut(final Context context) {
    new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE)
        .showCancelButton(true)
        .setTitleText(context.getString(R.string.areYouSure))
        .setContentText(context.getString(R.string.logoutMSG))
        .setCancelText(context.getString(android.R.string.no))
        .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
            @Override
            public void onClick(SweetAlertDialog sweetAlertDialog) {
                sweetAlertDialog.dismiss();
            }
        })
        .setConfirmText(context.getString(R.string.yes))
        .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
            @Override
            public void onClick(final SweetAlertDialog sweetAlertDialog) {
                //region Google
                GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(context.getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
                final GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context)
                    .enableAutoManage((FragmentActivity) context, new GoogleApiClient.OnConnectionFailedListener() {
                        @Override
                        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                            FirebaseCrash.log(connectionResult.getErrorMessage());
                            Toast.makeText(context, context.getString(R.string.error), Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
                mGoogleApiClient.registerConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {@
                    Override
                    public void onConnected(@Nullable Bundle bundle) {

                        FirebaseAuth.getInstance().signOut();
                        if (mGoogleApiClient.isConnected()) {
                            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback < Status > () {@
                                Override
                                public void onResult(@NonNull Status status) {
                                    if (status.isSuccess()) {
                                        FirebaseAuth.getInstance().signOut();
                                        sweetAlertDialog.dismiss();
                                        Log.d(TAG, "User Logged out");
                                        Intent intent = new Intent(context, SignUp.class);
                                        context.startActivity(intent);
                                        ((FragmentActivity) context).finish();
                                    } else
                                        Toast.makeText(context, context.getString(R.string.error), Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }

                    @
                    Override
                    public void onConnectionSuspended(int i) {
                        Log.e(TAG, "Google API Client Connection Suspended");
                    }
                });
                //endregion
            }
        }).show();
}

【问题讨论】:

    标签: android firebase facebook-login firebase-authentication


    【解决方案1】:

    Firebase 本身、GoogleFacebook 的 3 种退出方法。

    //LOG_OUT
        public static void signOut(Activity activity) {
            if (mAuth == null)
                mAuth = FirebaseAuth.getInstance();
    
            //Firebase SignOut
            mAuth.signOut();
    
            //Google SignOut
            SignInWithGoogle signInWithGoogle = new SignInWithGoogle(activity);
            signInWithGoogle.getGoogleSignInClient().signOut()
                    .addOnCompleteListener(activity, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Log.d(TAG, "Google Sign Out!!! ");
                }
            });
    
            //Facebook SignOut
            LoginManager.getInstance().logOut();
        }
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,并使用 firebase Auth 实例和 facebook LoginManager 实例解决了它

      FirebaseAuth.getInstance().signOut();
      LoginManager.getInstance().logOut();
      

      My Question

      【讨论】:

      • 嘿,谢谢你的回答,但我还是有问题。如果用户想要更改他的 Facebook 帐户怎么办?点击“登录”按钮会自动选择一个用户。
      • 我认为如果用户从 facebook 应用程序更改了他的帐户,然后从您的应用程序再次单击登录(注销时)会将他重定向到使用新帐户登录。但是,如果他在您的应用程序上仍然有一个活动会话,您可能需要检查它以执行特定操作,例如这里 stackoverflow.com/questions/29294015/…
      • 我也有同样的问题。当我退出时,退出按钮仍然出现。当我点击退出按钮时,我可以正常退出。
      • 这两行代码在课堂上的哪个位置? onCreate 方法?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2016-11-06
      • 2011-08-12
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      相关资源
      最近更新 更多