API 26下Google Credential Manager使用问题及替代方案咨询
解决方案
你遇到的问题是混淆了Android系统原生Credential Manager(仅API34+支持)和Google官方的Credential Manager SDK(替代Google Sign-In,支持API21+),后者才是Google推荐用来替代即将弃用的Google Sign-In的方案,具体处理步骤如下:
替换依赖,引入Google Credential Manager SDK
在你的模块build.gradle(或build.gradle.kts)中添加官方依赖:implementation "com.google.android.libraries.identity.googleid:googleid:1.1.0"调整代码逻辑,使用Google Credential Manager的API
注意所有相关类都来自com.google.android.libraries.identity.googleid包,而非Android系统的android.credentials包:// 1. 构建Google ID Token凭证选项 val googleIdOption = GoogleIdTokenCredentialOption.Builder() .setFilterByAuthorizedAccounts(false) // 是否只显示已授权的账号 .setServerClientId("你的Web客户端ID") // 需在Google Cloud Console配置的Web类型OAuth客户端ID .build() // 2. 构建获取凭证的请求 val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build() // 3. 调用CredentialManager获取凭证 val credentialManager = CredentialManager.create(context) try { val result = credentialManager.getCredential(context, request) val googleIdTokenCredential = result.credential as GoogleIdTokenCredential val idToken = googleIdTokenCredential.idToken // 将idToken发送到后端进行验证,完成登录流程 } catch (e: GetCredentialException) { when (e.type) { GetCredentialException.TYPE_NO_CREDENTIALS_AVAILABLE -> { // 无可用凭证,引导用户完成首次登录 } GetCredentialException.TYPE_USER_CANCELED -> { // 用户取消操作,处理取消逻辑 } else -> { // 处理其他异常情况 } } }低版本兼容的兜底方案(可选)
如果你的应用需要支持API21以下的极旧设备,可暂时保留Google Sign-In的实现,但需标记为待移除代码,待2025年SDK移除后彻底切换到Credential Manager。不过目前绝大多数Android设备都已满足API21+要求,这个步骤通常可以省略。关键配置提醒
确保在Google Cloud Console中正确配置OAuth 2.0客户端ID:需同时创建Android客户端(绑定应用包名和签名指纹)和Web客户端(用于后端验证ID Token),代码中使用的是Web客户端ID。
内容的提问来源于stack exchange,提问作者Alex20280
相关产品推荐
相关产品推荐

