使用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
相关产品推荐
相关产品推荐

