Android端Firebase手机号认证后重启app获取当前用户返回null怎么解决
问题解决方法
原因说明
该问题为Firebase Auth 21.0.1版本的典型问题,getCurrentUser()返回null一般是因为Auth本地持久化状态异步加载未完成、版本本身存在持久化bug,或者初始化逻辑有误导致。
具体解决步骤
- 优先调整Auth状态监听逻辑
不要在应用启动初期直接调用getCurrentUser()判断登录状态,Firebase Auth的本地持久化凭证是异步加载的,应用刚启动时调用大概率还没完成加载。改用AuthStateListener监听认证状态变化,回调触发时再获取用户实例,代码示例如下:
FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); if (firebaseUser != null) { // 已登录,执行业务逻辑 DatabaseReference reference1 = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid()); reference1.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NotNull DataSnapshot dataSnapshot) { User user = dataSnapshot.getValue(User.class); } @Override public void onCancelled(@NotNull DatabaseError databaseError) { } }); } else { // 未登录,跳转登录页逻辑 } } });
- 升级Auth依赖版本
21.0.1版本存在已知的本地凭证持久化bug,会偶发退出应用后登录状态丢失的问题,建议升级到稳定版:
implementation 'com.google.firebase:firebase-auth:22.3.1'
升级后同步Gradle即可,无需修改现有业务逻辑。
- 检查初始化与清理逻辑
- 确认你没有在自定义的应用退出逻辑中调用
FirebaseAuth.getInstance().signOut()或者手动清除应用本地存储数据,这两种操作都会清空Firebase保存的登录凭证 - 确认在Application的
onCreate生命周期中正确初始化Firebase,若使用手动初始化方式,需要保证参数和google-services.json中的配置完全一致 - 如果开启了混淆,检查有没有添加Firebase Auth的混淆规则,避免相关类被误删导致状态加载失败
内容的提问来源于stack exchange,提问作者PPL
相关产品推荐
相关产品推荐

