首页 > 解决方案 > 如何在登录 Android 时更新 Firebase 用户个人资料?

问题描述

目前,我在登录更新 FirebaseUser 个人资料,我可以将其作为登录参数的一部分吗?即作为原子操作?

原因是我想避免处理配置文件未正确更新的错误,例如互联网连接不稳定或应用程序崩溃

我尝试在实际登录之前更新个人资料名称,希望它能从以前的名称中获取它,但它没有用

请注意,登录前的用户是匿名用户,其uid可能与最终登录用户不同

这是我当前的代码

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    FirebaseAuth.getInstance().signInWithCredential(credential)
        .addOnCompleteListener(requireActivity()) { task ->
            if (task.isSuccessful) {
                updateProfile()
            } else {
                codeError()
            }
        }
}

private fun updateProfile() {
    val profile = UserProfileChangeRequest.Builder()
        .setDisplayName("user name")
        .build()

    FirebaseAuth.getInstance().currentUser!!.updateProfile(profile)

    goBackToMain()
}

标签: androidfirebasekotlinfirebase-authentication

解决方案


目前我在登录后更新 Firebase 用户个人资料

这是正确的做法。当您调用 时signInWithPhoneAuthCredential(),会创建一个FirebaseUser对象。一旦这个对象被创建,它就可以被更新。

我尝试在实际登录之前更新个人资料名称,希望它能从以前的名称中获取它,但它没有用

事实上,这是预期的行为,因为在登录之前,FirebaseUser 对象:

FirebaseAuth.getInstance().currentUser

将返回 null,这意味着用户未登录。您无法更新未初始化且将值保留为 null 的对象。

请注意,登录前的用户是匿名用户,其 uid 可能与最终登录用户不同。

除非用户注销或卸载应用程序,否则不会。当您将匿名帐户与提供商(例如与 Google)关联时,用户的 UID 保持不变,这意味着:

FirebaseAuth.getInstance().currentUser.uid

与您关联帐户之前相同。


推荐阅读