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

Android平台Firebase Google登录突然失效问题求助

Google Sign-In突然失效,返回RESULT_CANCELED(resultCode=0)的排查方案

我之前也碰到过一模一样的问题,折腾了好几天才找到根源,给你几个针对性的排查方向,你可以一步步试:

  • 先检查Google Play服务状态
    这是最容易被忽略的点!如果设备上的Google Play服务版本过旧、损坏或者缓存异常,会直接导致登录流程中断,返回RESULT_CANCELED。你可以:

    1. 打开Google Play商店,搜索「Google Play服务」并更新到最新版本;
    2. 如果是模拟器,确保使用的是带Google Play的系统镜像,并且服务已更新;
    3. 试试清除Google Play服务的缓存(设置→应用→Google Play服务→存储→清除缓存)。
  • 重新核对SHA指纹与客户端ID
    你说已经检查过SHA-1,但建议再仔细核对一遍:

    1. 用keytool重新生成debug/release的SHA-1和SHA-256指纹(别搞混环境!测试用debug,发布用release);
    2. 登录Google Cloud Console,找到你的项目→API和服务→凭据→OAuth 2.0客户端ID,确认对应Android客户端的指纹是否和你生成的完全一致;
    3. 同步Firebase控制台的指纹(有时候Firebase和Google Cloud的同步会有延迟,手动刷新试试)。
  • 验证default_web_client_id的正确性
    你代码里用的getString(R.string.default_web_client_id)是从google-services.json自动生成的吗?有可能存在以下问题:

    1. google-services.json文件没有更新,或者放错了目录(比如debug和release文件夹各有一个,你用的是旧的那个);
    2. 直接去Google Cloud Console复制Web类型的客户端ID,手动替换代码里的getString(R.string.default_web_client_id),测试是否能正常登录——如果能,说明是字符串资源的问题,重新同步项目生成正确的资源即可。
  • 检查OAuth同意屏幕配置
    如果你的应用最近修改了登录范围,或者是第一次发布外部用户访问,OAuth同意屏幕可能未配置正确:

    1. 登录Google Cloud Console→API和服务→OAuth同意屏幕;
    2. 如果是「外部」用户类型,确保同意屏幕已通过审核;
    3. 测试阶段,把你用来测试的邮箱添加到「测试用户」列表里,否则普通用户会被拒绝登录,直接返回取消。
  • 完善代码里的错误捕获与日志
    你的代码目前只捕获了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账号异常导致的:

    1. 试试用另一台真机测试;
    2. 模拟器里删除现有Google账号,重新登录后再测试Sign-in功能。

内容的提问来源于stack exchange,提问作者Danish Ajaib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:50:44