簡體   English   中英

如何在Firebase中添加帶有電子郵件+密碼身份驗證的DisplayName? Android的

[英]How to add DisplayName with email + password authentication in Firebase? Android

private void registerUser(){
String emailId = email.getText().toString().trim().toLowerCase();
String password = pass.getText().toString().trim();

firebaseAuth.createUserWithEmailAndPassword(emailId,password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                progressDialog.dismiss();
                if(task.isSuccessful()){
                    Toast.makeText(MainActivity.this,"Registration Successful",Toast.LENGTH_SHORT).show();

                    //show chatroom
                    finish();
                    startActivity(new Intent(getApplicationContext(),ProfileActivity.class));
                }
                else{
                    Toast.makeText(MainActivity.this,"Registration Failed. Please try again",Toast.LENGTH_SHORT).show();
                }
            }
        });
}

我希望為其添加用戶名或顯示名稱,但我無法這樣做。 我嘗試了一些但仍然沒有結果。 請幫助我。 我本周需要為項目提交提供此功能。

這肯定是可能的,但不是在用戶創建方法中。

一旦您創建了用戶(可能在addOnSuccessListener ),您就可以使用類似於以下代碼的內容來更新Users DisplayName:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder().setDisplayName("John Smith").build();

user.updateProfile(profileUpdates);

希望這可以幫助!

編輯:我之前說過要將代碼添加到AuthStateListener中,但是,Frank下面的建議將它放在addOnSuccessListener中更好/更有意義,所以我更新了答案以反映這一點。

我剛剛為自己的實現調查了這個問題(SDK版本4.4.1)。 我發現如果您確定使用來自注冊/登錄的完全相同的task.result對象而不是默認實例中的對象,它將完美地運行。

另一個幫助我的工作是在FB DB中有一個電子郵件參考表,如下所示:

{ "EmailRef": { "username1" : "email@ domain .com"}, {"username2" : "email2@domain.com"} }

然后使用如下方法通過用戶的電子郵件(來自auth.CurrentUser.Email)查詢用戶名:

public static void GetCurrentUserName(Firebase.Auth.FirebaseUser user)
{
    string message = "";
    DatabaseReference dbRef = FbDbConnection();
    FirebaseDatabase.DefaultInstance.GetReference("EmailRef").OrderByValue().EqualTo(user.Email).GetValueAsync().ContinueWith(task =>
    {
        if (task.IsFaulted)
        {
            message = "GetCurrentUserName encountered an error: " + task.Exception;
            ModalManager.BuildFireBaseDebugModal(message);
            Debug.LogError(message);
            return;
        }
        if (task.IsCanceled)
        {
            message = "GetCurrentUserName was canceled.";
            Debug.LogError(message);
            return;
        }
        if (task.IsCompleted)
        {
            foreach (DataSnapshot ss in task.Result.Children.AsEnumerable())
            {
                try
                {
                    if (ss.Value != null)
                    {
                        if (ss.Value.ToString() == user.Email)
                        {
                            message = "GetCurrentUserName was successful -- Email: " + user.Email + " Username: " + user.DisplayName;
                            Debug.LogError(message);
                        }
                    }
                    return;
                }
                catch (Exception ex)
                {
                    message = "GetCurrentUserName Exception: " + ex;
                    Debug.LogError(message);
                    return;
                }
            }
        }

    });
}

暫無
暫無

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

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