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

Android从GoogleSignInClient迁移至Credential Manager的认证适配疑问

解决方案

1. 通过Credential Manager获取用户信息

使用Credential Manager完成Google登录后,需从GoogleIdTokenCredential实例中提取所需用户信息,具体操作如下:

步骤1:配置登录请求

构建登录请求时,指定Google身份提供商并声明需要获取的用户信息字段:

val googleIdOption = GetGoogleIdOption.Builder()
    .setFilterByAuthorizedAccounts(false)
    .setServerClientId(YOUR_WEB_CLIENT_ID) // 与旧GoogleSignInClient使用的Web客户端ID一致
    .setRequestEmail(true)
    .setRequestProfile(true)
    .build()

val request = GetCredentialRequest.Builder()
    .addCredentialOption(googleIdOption)
    .build()

步骤2:处理登录结果

登录成功后,将返回的Credential转换为GoogleIdTokenCredential,即可提取目标信息:

val credentialManager = CredentialManager.create(context)
coroutineScope.launch {
    try {
        val result = credentialManager.getCredential(request = request, context = context)
        val googleCredential = result.credential as GoogleIdTokenCredential
        
        // 提取所需的用户信息
        val googleId = googleCredential.id // 核心的Google ID
        val email = googleCredential.email
        val displayName = googleCredential.displayName
        val profilePhotoUri = googleCredential.profilePictureUri
        
        // 后续业务逻辑处理
    } catch (e: Exception) {
        // 处理登录失败场景
    }
}

注意:若profilePhotoUri为空,说明用户未设置个人头像,需做好空值兼容处理。

必须添加对应Scopes。

旧版GoogleSignInClient会自动默认请求openid、email、profile这三个基础Scope,因此你之前无需手动配置也能获取用户信息。但Credential Manager要求显式声明所需Scope,所以必须在Google Cloud Console的OAuth Consent Screen中添加以下Scope:

  • openid:用于获取用户唯一的Google ID
  • email:用于获取用户邮箱地址
  • profile:用于获取用户显示名称与头像信息

添加完成后,用户首次登录时会看到对应的权限申请提示,同意后即可正常获取所有目标信息。

内容的提问来源于stack exchange,提问作者Sujith S Manjavana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:19:52