android - 如何在登录 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()
}
解决方案
目前我在登录后更新 Firebase 用户个人资料
这是正确的做法。当您调用 时signInWithPhoneAuthCredential()
,会创建一个FirebaseUser对象。一旦这个对象被创建,它就可以被更新。
我尝试在实际登录之前更新个人资料名称,希望它能从以前的名称中获取它,但它没有用
事实上,这是预期的行为,因为在登录之前,FirebaseUser 对象:
FirebaseAuth.getInstance().currentUser
将返回 null,这意味着用户未登录。您无法更新未初始化且将值保留为 null 的对象。
请注意,登录前的用户是匿名用户,其 uid 可能与最终登录用户不同。
除非用户注销或卸载应用程序,否则不会。当您将匿名帐户与提供商(例如与 Google)关联时,用户的 UID 保持不变,这意味着:
FirebaseAuth.getInstance().currentUser.uid
与您关联帐户之前相同。
推荐阅读
- php - PHP - 无法显示图像,因为它包含错误
- ios - “无效的代码签名权利”
- java - 跨多个服务器共享休眠搜索索引
- react-native - 如何在 react-native-tab-view 中更改选定选项卡的背景颜色
- log4j - Log4j 日志记录在 wildfly-10.1.0.Final 上不起作用
- c - 当 C 程序从 bash 脚本运行时内存泄漏
- python - 是否可以在 PyCharm 中生成 py.test 测试文件?
- scala - 与 foreachRDD Spark Streaming 的数据库连接
- c# - 如何在打字稿中使用 C# 字典?
- reactjs - 如何在 React js 中使用模块路径