You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中通过FirebaseUI分别获取用户的名和姓?

如何从Firebase Auth用户中分别获取名和姓

嘿,我来帮你搞定这个问题~ FirebaseUI的currentUser.displayName确实会把名和姓拼接成一个字符串返回,但我们可以根据不同的登录提供商,用更精准的方式拆分或者提取单独的名和姓,下面给你两种可行的方案:

方案一:直接拆分displayName(适合简单场景)

如果你的用户群体里,名字都是「名 姓」这种空格分隔的格式,那直接按空格拆分是最快捷的方式:

val fullName = currentUser?.displayName ?: ""
// 用limit=2确保只拆分成名和姓两部分,避免多空格或长名字的问题
val nameParts = fullName.split(" ", limit = 2)
val firstName = nameParts.getOrNull(0) ?: ""
val lastName = nameParts.getOrNull(1) ?: ""

不过这个方法有局限性:如果用户的名字里包含多个空格(比如「Mary Ann Smith」),或者是非英语系的名字格式(比如姓在前名在后),拆分结果可能不准确。

方案二:从提供商原始信息提取(更精准)

Google、Facebook这类第三方登录提供商,本身会返回用户的名(givenName)和姓(familyName)字段,我们可以通过currentUser.providerData拿到这些原始信息,比拆分displayName靠谱得多。下面是针对你用到的几种登录方式的Kotlin示例:

var firstName = ""
var lastName = ""

currentUser?.providerData?.forEach { userInfo ->
    when (userInfo.providerId) {
        // Google登录:直接提取givenName和familyName
        "google.com" -> {
            firstName = userInfo.givenName ?: ""
            lastName = userInfo.familyName ?: ""
        }
        // Facebook登录:同样支持提取givenName和familyName
        "facebook.com" -> {
            firstName = userInfo.givenName ?: ""
            lastName = userInfo.familyName ?: ""
        }
        // Twitter登录:默认授权可能不返回单独的名姓,只能拆分displayName
        "twitter.com" -> {
            val twitterFullName = userInfo.displayName ?: ""
            val nameParts = twitterFullName.split(" ", limit = 2)
            firstName = nameParts.getOrNull(0) ?: ""
            lastName = nameParts.getOrNull(1) ?: ""
        }
        // 邮箱密码登录:FirebaseUI默认只收集全名,只能拆分或额外收集
        "password" -> {
            val emailFullName = userInfo.displayName ?: ""
            val nameParts = emailFullName.split(" ", limit = 2)
            firstName = nameParts.getOrNull(0) ?: ""
            lastName = nameParts.getOrNull(1) ?: ""
        }
    }
}

额外提醒:

  • 对于Google和Facebook登录,givenName和familyName是官方返回的字段,准确性很高,优先用这个方式。
  • Twitter的情况比较特殊,如果需要更精准的名姓信息,你可能需要在Twitter登录流程中请求额外的权限(比如profile权限),但即使这样,有些用户可能没有完善个人资料,还是得 fallback 到拆分displayName。
  • 邮箱登录的用户,如果想彻底解决这个问题,建议在注册流程里单独添加「名」和「姓」的输入框,然后把这些信息存在Firestore或者Realtime Database里,后续直接从数据库读取会更灵活。

内容的提问来源于stack exchange,提问作者Lamberto Basti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:22:54