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

使用Credential Manager时如何撤销权限?OneTap迁移后的技术问询

从OneTap迁移到Credential Manager后的权限撤销方法

Credential Manager本身并不直接提供权限撤销能力——它主要负责统一的凭证存储、获取与登录流程触发,而权限撤销属于具体身份提供商(比如Google)的账号管理范畴。你可以按以下步骤实现需求:

  • 继续保留对应身份提供商的SDK依赖(比如Google Sign-In SDK),因为撤销账号权限仍需依赖该提供商的原生API
  • 按原有方式初始化身份提供商的客户端实例(比如GoogleSignInClient),配置对应的权限参数
  • 调用提供商SDK的权限撤销接口(比如GoogleSignInClient#revokeAccess()),逻辑和OneTap时期完全一致
  • 权限撤销完成后,调用Credential Manager的deleteCredential()方法,移除本地存储的对应凭证,避免用户后续登录时看到无效的凭证选项

代码示例(以Google身份验证为例)

// 初始化GoogleSignInClient
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestEmail()
    .build()
val googleSignInClient = GoogleSignIn.getClient(context, gso)

// 执行权限撤销
googleSignInClient.revokeAccess()
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            // 权限撤销成功,删除Credential Manager中的对应凭证
            val credentialManager = CredentialManager.create(context)
            val targetCredential = PasswordCredential.Builder(
                "google", // 需与存储凭证时的ID一致
                userEmail
            ).build()
            credentialManager.deleteCredential(
                context,
                DeleteCredentialRequest.Builder()
                    .setCredential(targetCredential)
                    .build()
            ).addOnCompleteListener { deleteTask ->
                if (deleteTask.isSuccessful) {
                    // 凭证删除完成,可执行后续逻辑
                }
            }
        }
    }

注意事项:

  • 若使用其他身份提供商(如Apple、Facebook),需调用对应SDK的权限撤销接口,再同步删除Credential Manager中的凭证
  • 调用deleteCredential时,传入的凭证信息需和之前存储到Credential Manager的完全匹配,否则会删除失败

内容的提问来源于stack exchange,提问作者Always Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:49:57