Android Kotlin - Google 凭据管理器 - 获取用户 ID

问题描述 投票:0回答:1
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
    try {

        val googleIdTokenCredential = GoogleIdTokenCredential
            .createFrom(credential.data)

        val personToken = googleIdTokenCredential.idToken
        val personId = googleIdTokenCredential.id
        val displayName = googleIdTokenCredential.displayName
        val personPhoto = googleIdTokenCredential.profilePictureUri

    } catch (e: GoogleIdTokenParsingException) {
        Log.d("pikaboo", "Received an invalid google id token response", e)
    }
}

googleIdTokenCredential.id
给了我电子邮件地址,这是一个错误吗?

旧登录的代码是:

val acct = GoogleSignIn.getLastSignedInAccount(this@GoogleLogin)
if (acct != null) {
    val displayName = acct.displayName
    val personGivenName = acct.givenName
    val personFamilyName = acct.familyName
    val personId = acct.id
    val personPhoto = acct.photoUrl

    var photo = ""
    if(personPhoto != null){
        photo = personPhoto.toString()
    }

    sendToServer(personId!!, photo, displayName, personGivenName, personFamilyName)
}

acct.id
给了我一个像
113755066377078777777

这样的ID

我有很多用户都与这样的ID相关联,谷歌到底出了什么问题?如何使用新的凭据管理器获取普通 ID 而不是电子邮件地址?

android kotlin google-signin android-credential-manager
1个回答
0
投票

要回答你的第一个问题,这是否是一个错误,答案是否定的,这不是一个错误。正如文档明确指出的那样,该字段返回用户的电子邮件地址:

与用户的 Google 帐户关联的电子邮件地址。

为了获得您想要的“id”,您需要查看代码片段中由

personToken
捕获的 ID 令牌。 ID 令牌具有许多 JWT 格式(基本上是 JSON)的字段,最好由调用者解析以提取所需的信息。您可能对那里的“子”字段感兴趣,请参阅this了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.