簡體   English   中英

在android中獲取firebase用戶id

[英]Get firebase user id in android

用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' ...如何解決問題?

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) {
        }
    });
}

Firebase 會在您重新啟動應用程序時自動恢復用戶憑據。 這需要它調用服務器,其中包括檢查帳戶是否被禁用。 由於此調用可能需要一些時間才能完成,因此很可能在您調用FirebaseAuth.getInstance().getCurrentUser()時它仍在進行中。

出於這個原因,最好改為觀察FirebaseAuth.instance.authStateChanges() ,如https://stackoverflow.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());
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM