Android平台Firebase Google登录突然失效问题求助
Google Sign-In突然失效,返回RESULT_CANCELED(resultCode=0)的排查方案
我之前也碰到过一模一样的问题,折腾了好几天才找到根源,给你几个针对性的排查方向,你可以一步步试:
先检查Google Play服务状态
这是最容易被忽略的点!如果设备上的Google Play服务版本过旧、损坏或者缓存异常,会直接导致登录流程中断,返回RESULT_CANCELED。你可以:- 打开Google Play商店,搜索「Google Play服务」并更新到最新版本;
- 如果是模拟器,确保使用的是带Google Play的系统镜像,并且服务已更新;
- 试试清除Google Play服务的缓存(设置→应用→Google Play服务→存储→清除缓存)。
重新核对SHA指纹与客户端ID
你说已经检查过SHA-1,但建议再仔细核对一遍:- 用
keytool重新生成debug/release的SHA-1和SHA-256指纹(别搞混环境!测试用debug,发布用release); - 登录Google Cloud Console,找到你的项目→API和服务→凭据→OAuth 2.0客户端ID,确认对应Android客户端的指纹是否和你生成的完全一致;
- 同步Firebase控制台的指纹(有时候Firebase和Google Cloud的同步会有延迟,手动刷新试试)。
- 用
验证default_web_client_id的正确性
你代码里用的getString(R.string.default_web_client_id)是从google-services.json自动生成的吗?有可能存在以下问题:google-services.json文件没有更新,或者放错了目录(比如debug和release文件夹各有一个,你用的是旧的那个);- 直接去Google Cloud Console复制Web类型的客户端ID,手动替换代码里的
getString(R.string.default_web_client_id),测试是否能正常登录——如果能,说明是字符串资源的问题,重新同步项目生成正确的资源即可。
检查OAuth同意屏幕配置
如果你的应用最近修改了登录范围,或者是第一次发布外部用户访问,OAuth同意屏幕可能未配置正确:- 登录Google Cloud Console→API和服务→OAuth同意屏幕;
- 如果是「外部」用户类型,确保同意屏幕已通过审核;
- 测试阶段,把你用来测试的邮箱添加到「测试用户」列表里,否则普通用户会被拒绝登录,直接返回取消。
完善代码里的错误捕获与日志
你的代码目前只捕获了ApiException,可以扩大捕获范围,同时增加更多日志信息:private var googleSigninLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result -> Log.d("LOGIN_DEBUG", "Result code: ${result.resultCode}, Data: ${result.data}") if(result.resultCode == RESULT_OK){ val data = result.data if(data == null){ Log.d("LOGIN_DEBUG", "Intent data is null") return@registerForActivityResult } val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { val account = task.getResult(ApiException::class.java) account.idToken?.let {token-> firebaseAuthWithGoogle(token) } } catch (e: ApiException) { Log.d("LOGIN_DEBUG", "ApiException: ${e.statusCode} - ${e.message}") } catch (e: Exception) { Log.d("LOGIN_DEBUG", "Other exception: ${e.message}") } }else{ toast(this@MainActivity, getString(R.string.there_was_an_error)) Log.d("LOGIN_DEBUG", "Result code is not OK: ${result.resultCode}") } }这样能帮你更精准定位问题,比如如果
result.data是null,那大概率是登录流程被中途取消了。换设备/模拟器测试
有时候是特定设备的Google账号异常导致的:- 试试用另一台真机测试;
- 模拟器里删除现有Google账号,重新登录后再测试Sign-in功能。
内容的提问来源于stack exchange,提问作者Danish Ajaib
相关产品推荐
相关产品推荐

