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

Android集成Firebase Auth实现Google登录失败求助

解决Firebase Auth Google登录返回DEVELOPER_ERROR问题

场景:通过Android Studio「Generate Signed Bundle」生成密钥库,用keytool获取SHA1/SHA256,应用未上架Google Play,集成Firebase Auth实现Google登录时,Logcat返回Status{statusCode=DEVELOPER_ERROR, resolution=null},尝试旧版startActivityForResult、添加Web Server ID等方法未解决。

以下是核心排查和修复步骤:

1. 验证SHA1指纹配置一致性

  • 区分调试/发布指纹:调试版和发布版签名密钥库的SHA1是不同的,若当前运行的是调试包,必须将调试密钥库的SHA1也添加到Firebase控制台(不要只加发布版指纹)。
    • 获取调试SHA1命令:
      keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
      
    • 获取发布版SHA1命令:
      keytool -list -v -keystore 你的密钥库文件路径 -alias 密钥别名
      
  • 同步google-services.json:检查Firebase控制台中配置的SHA1,与google-services.json里oauth_client下certificate_hash的值是否完全一致,不一致则重新下载google-services.json替换到项目app目录。

2. 修正GoogleSignInOptions配置

集成Firebase Auth时,必须在GoogleSignInOptions中添加requestIdToken,且传入的是Web应用类型的Client ID(对应google-services.json中client_type:3的client_id,而非Android客户端ID),示例:

val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken("169480533010-f4..f0.apps.googleusercontent.com") // 替换为你的Web Client ID
    .requestEmail()
    .build()

3. 调整Firebase初始化顺序与回调逻辑

  • 初始化顺序:必须先初始化Firebase,再创建GoogleSignInClient,修正代码顺序:
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 先初始化Firebase
        FirebaseApp.initializeApp(this)
        firebaseAuth = FirebaseAuth.getInstance()
        
        // 再创建GoogleSignInClient
        val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken("你的Web Client ID")
            .requestEmail()
            .build()
        googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)
        
        // 按钮点击逻辑
        val button = findViewById<Button>(R.id.btnLogin)
        button.setOnClickListener {
            resultLauncher.launch(googleSignInClient.signInIntent)
        }
    }
    
  • 完善回调逻辑:需将Google登录结果转换为Firebase凭证并完成认证,示例:
    val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
            try {
                val account = task.getResult(ApiException::class.java)
                // 获取Google认证凭证
                val credential = GoogleAuthProvider.getCredential(account.idToken, null)
                // 关联Firebase Auth
                firebaseAuth.signInWithCredential(credential)
                    .addOnCompleteListener(this) { authTask ->
                        if (authTask.isSuccessful) {
                            val user = firebaseAuth.currentUser
                            println("登录成功:${user?.displayName}")
                        } else {
                            println("Firebase认证失败:${authTask.exception?.message}")
                        }
                    }
            } catch (e: ApiException) {
                println("Google登录失败,错误码:${e.statusCode}")
            }
        }
    }
    

4. 清理依赖与插件冗余配置

  • 根目录build.gradle移除冗余的google-services插件声明:
    buildscript {
        dependencies {
            classpath 'com.google.gms:google-services:4.3.15'
        }
    }
    
    plugins {
        id 'com.android.application' version '8.0.1' apply false
        id 'com.android.library' version '8.0.1' apply false
        id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
    }
    
  • app/build.gradle移除不必要的依赖:
    dependencies {
        implementation platform('androidx.compose:compose-bom:2022.10.00')
        implementation platform('com.google.firebase:firebase-bom:32.0.0')
        implementation 'com.google.firebase:firebase-auth'
        implementation 'com.google.android.gms:play-services-auth:20.5.0'
        androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00')
    }
    

5. 清理缓存并重建项目

  • 执行File -> Invalidate Caches... -> Invalidate and Restart清理Android Studio缓存
  • 执行Build -> Clean Project和Build -> Rebuild Project重新构建
  • 卸载设备上的旧应用,重新安装运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:45:34