使用New Google Sign-In API时出现「Cannot find an eligible account」问题求助
检查OAuth客户端ID配置一致性
确认代码中使用的client_id与Google Cloud Console里的配置完全匹配,重点核对Android客户端的SHA-1指纹和应用包名。单账号场景下,账号授权范围与客户端ID不匹配时更容易触发报错——多账号可能存在某个账号刚好符合匹配条件,而单账号完全不满足。验证目标账号的授权状态
打开手机「Google账号设置」→「安全」→「第三方应用访问权限」,查看你的应用是否在列表中。如果没有,说明该账号从未授权过你的应用,或授权已被撤销。新版Sign-In API在单账号无授权记录时,可能不会自动拉起授权流程,而是直接报错。可以先尝试静默登录,失败后再启动显式授权:val googleSignInClient = GoogleSignIn.getClient(context, gso) googleSignInClient.signInSilently() .addOnFailureListener { // 静默登录失败,启动显式登录界面 startActivityForResult(googleSignInClient.signInIntent, RC_SIGN_IN) }核对Sign-In选项的权限配置
确保GoogleSignInOptions中设置的requestScopes、requestEmail等权限,与Cloud Console中应用的OAuth权限范围一致。如果请求了未在控制台配置的权限,单账号场景下会直接判定为不满足条件。示例:val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestScopes(Scope("https://www.googleapis.com/auth/drive.file")) // 需确保该权限已在控制台添加 .build()清除应用的Google登录缓存
进入手机「设置」→「应用」→ 你的应用 →「存储」→「清除缓存」,或者调用GoogleSignIn.getClient(context, gso).signOut()注销缓存的登录状态。新版API可能缓存了旧的账号授权信息,导致单账号匹配失败。更新Google Play服务
确保手机上的Google Play服务为最新版本,旧版Play服务可能与新版Sign-In API存在兼容性问题,单账号场景下这类问题更容易显现。排查API初始化时机
确认GoogleSignInClient在Activity或Fragment的onCreate阶段初始化,避免在后台线程或未完全就绪的上下文环境中创建,防止上下文异常导致账号检测失败。
内容的提问来源于stack exchange,提问作者user22607328

