You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Realtime Database谷歌账号登出后仍自动登录原账号问题

问题原因
  • 仅调用FirebaseAuth.getInstance().signOut()只能清除Firebase侧的登录状态,Google账号的授权凭证仍保存在Google Play服务缓存中,下次触发登录时会直接读取缓存完成自动登录。
  • 现有代码中的广播接收器仅在onResume生命周期注册,没有配套解注册逻辑,存在内存泄漏风险,长时间运行可能触发系统异常。
修复方案

1. 补充Google SignIn登出逻辑

首先在Options Fragment中初始化和登录页配置一致的GoogleSignInClient实例:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();
GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(requireActivity(), gso);

修改登出点击事件,等Google登出完成后再执行页面跳转逻辑:

logoutPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        FirebaseAuth.getInstance().signOut();
        // 登出Google账号,清除本地缓存的授权信息
        mGoogleSignInClient.signOut()
                .addOnCompleteListener(requireActivity(), new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Intent broadcastIntent = new Intent();
                        broadcastIntent.setAction("com.example.budgetapp.ACTION_LOGOUT");
                        requireActivity().sendBroadcast(broadcastIntent);
                        requireActivity().startActivity(new Intent(requireActivity(), SignInActivity.class));
                        requireActivity().finish();
                    }
                });
        // 如需让用户下次登录必须重新同意应用授权,可额外调用以下方法
        // mGoogleSignInClient.revokeAccess();
        return true;
    }
});

注:revokeAccess方法会彻底移除应用对该Google账号的授权,下次登录时需要用户重新同意权限申请,可根据业务需求选择是否调用

2. 修复广播接收器内存泄漏问题

在MainActivity中补充广播解注册逻辑:

@Override
protected void onPause() {
    super.onPause();
    if (receiver != null) {
        unregisterReceiver(receiver);
        receiver = null;
    }
}

调整完成后登出操作会同时清除Firebase和Google侧的登录凭证,下次触发登录时会正常弹出账号选择界面,不会自动登录之前的账号。

内容的提问来源于stack exchange,提问作者Shoji Yamada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:18:00