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

升级Firebase Android至15.0.0版本后已登录用户被登出问题咨询

我之前在项目升级Firebase Auth版本时也碰到过一模一样的问题,这其实是跨大版本升级时的兼容性问题,下面给你梳理下原因和解决办法:

问题原因

从Firebase Auth 11.8.0升级到15.0.0版本时,Auth模块对用户身份令牌的存储格式、解析逻辑做了底层调整,旧版本(11.8.0)持久化存储的用户令牌无法被新版本(15.0.0)正确识别,导致FirebaseAuth.getInstance().getCurrentUser()直接返回null,触发用户登出的现象,而且这个问题在Phone Auth和Email/Password Auth场景下都会出现。

解决方案

针对这个问题,你可以通过以下几种方式处理:

1. 手动处理令牌刷新与迁移

如果你的APP之前有持久化保存用户的refresh token(比如存在SharedPreferences中),可以在APP启动时尝试用旧的refresh token重新获取用户凭据,完成自动登录:

FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser currentUser = firebaseAuth.getCurrentUser();
        if (currentUser == null) {
            // 从本地存储中读取旧版本保存的refresh token
            SharedPreferences prefs = getSharedPreferences("AppPrefs", MODE_PRIVATE);
            String oldRefreshToken = prefs.getString("user_refresh_token", null);
            
            if (oldRefreshToken != null) {
                // 使用旧refresh token尝试重新登录
                mAuth.signInWithRefreshToken(oldRefreshToken)
                        .addOnCompleteListener(task -> {
                            if (task.isSuccessful()) {
                                FirebaseUser updatedUser = task.getResult().getUser();
                                // 保存新版本的refresh token,覆盖旧的
                                prefs.edit()
                                        .putString("user_refresh_token", updatedUser.getRefreshToken())
                                        .apply();
                            } else {
                                // 刷新失败,引导用户手动重新登录
                                navigateToLoginPage();
                            }
                        });
            } else {
                // 没有旧的refresh token,只能引导用户重新登录
                navigateToLoginPage();
            }
        }
    }
});

2. 确认持久化配置正确

虽然Firebase Auth默认启用持久化,但升级后可能需要明确配置确保生效,注意要在任何Auth操作之前调用:

// 在APP初始化时设置
FirebaseAuth.getInstance().setPersistenceEnabled(true);

3. 给用户添加过渡提示

如果你的用户群体较大,可以在APP升级后的首次启动时,弹出友好提示告知用户“因版本升级需要重新登录一次”,避免用户产生困惑。同时可以在后台统计这类情况,确保大部分用户能顺利完成过渡。


内容的提问来源于stack exchange,提问作者Abdul Wasae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:47