在android中获取firebase用户ID

Posted

技术标签:

【中文标题】在android中获取firebase用户ID【英文标题】:Get firebase user id in android 【发布时间】:2021-11-25 20:14:20 【问题描述】:

注册Firebase电话号码(短信)后,我可以从user_id等处获取user_id和好友列表。但是退出应用程序后,重新进入应用程序返回null (FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();)我不能没有得到 Firebase user id(firebaseUser 返回 null)。 implementation 'com.google.firebase:firebase-auth:21.0.1'lz... 怎么解决?

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null)  // return 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) 
        
    );

【问题讨论】:

您需要将用户登录到 FirebaseAuth 才能持久保存在实例中。 【参考方案1】:

当您重新启动应用时,Firebase 会自动恢复用户凭据。这需要它调用服务器,其中包括检查帐户是否被禁用。由于此通话可能需要一些时间才能完成,因此当您拨打 FirebaseAuth.getInstance().getCurrentUser() 时,它很可能仍在进行中。

因此,最好改为观察FirebaseAuth.instance.authStateChanges(),如https://***.com/collectives/google-cloud/articles/68104924/listen-for-authentication-state-in-android 所示。当我提到的身份验证检查完成时,首先调用此回调,因此您可以使用它来响应恢复的登录:

auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() 
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) 
        if (firebaseAuth.getCurrentUser() == null) 
            Log.i("firebase", "AuthState changed to null");
        
        else 
            Log.i("firebase", "AuthState changed to "+firebaseAuth.getCurrentUser().getUid());
        
    
);

【讨论】:

onCreate(), addAuthStateListener() 返回 AuthState 改为 null 这意味着重新启动时没有恢复用户凭据。您确定用户在上次关闭应用之前没有退出? 是的,我使用电话号码登录,然后从应用程序退出而不是注销FirebaseAuth.getInstance().signOut();。并进入应用,Firebase 用户仍然为空。 嗯...我不确定为什么会这样。您能否更新您的问题以显示您如何使用我的答案中的代码? 我创建新项目并测试,返回 Firebase 用户即可。但在我当前的项目中返回 null LOL :D

以上是关于在android中获取firebase用户ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用firebase作为数据库在android中获取附近的用户名?

如何在Firebase中获取用户数作为计数在android TextView中

如何从android上的firebase获取用户uid?

Firebase 参考获取总是最后一个用户被创建 android studio

Android,从 firebase 数据库中获取价值

如何在firebase android中获取对象ID?