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为空,说明用户未设置个人头像,需做好空值兼容处理。
2. OAuth Consent Screen的Scope配置
必须添加对应Scopes。
旧版GoogleSignInClient会自动默认请求openid、email、profile这三个基础Scope,因此你之前无需手动配置也能获取用户信息。但Credential Manager要求显式声明所需Scope,所以必须在Google Cloud Console的OAuth Consent Screen中添加以下Scope:
openid:用于获取用户唯一的Google IDemail:用于获取用户邮箱地址profile:用于获取用户显示名称与头像信息
添加完成后,用户首次登录时会看到对应的权限申请提示,同意后即可正常获取所有目标信息。
内容的提问来源于stack exchange,提问作者Sujith S Manjavana
相关产品推荐
相关产品推荐

