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

Jetpack Compose结合Firebase实现Google authentication注册

Jetpack Compose + Kotlin 实现Firebase Google认证注册从零搭建指南

适用技术栈:Android Studio、Kotlin、Jetpack Compose,实现效果为用户点击按钮触发Google账号授权,对接Firebase完成注册/登录全流程。

1. Firebase项目基础配置

  • 打开Firebase控制台新建项目,按向导完成创建,无需强制开启Google Analytics即可使用认证功能
  • 项目创建后选择「添加Android应用」,填写的包名必须和Android Studio项目中app模块build.gradle.kts内的applicationId完全一致
  • 下载自动生成的google-services.json配置文件,放到Android Studio项目的app模块根目录下

2. Gradle依赖配置

  • 打开项目级build.gradle.kts,在plugins块中添加Google服务插件依赖:
plugins {
    id("com.android.application") version "8.2.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.20" apply false
    id("com.google.gms.google-services") version "4.4.0" apply false
}
  • 打开app模块级build.gradle.kts,先在plugins块引入Google服务插件,再添加认证相关依赖:
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.gms.google-services")
}

dependencies {
    // 引入Firebase BoM统一管理依赖版本,无需单独指定每个Firebase库的版本号
    implementation(platform("com.google.firebase:firebase-bom:32.7.0"))
    // Firebase认证Kotlin扩展库
    implementation("com.google.firebase:firebase-auth-ktx")
    // Google登录服务核心库
    implementation("com.google.android.gms:play-services-auth:20.7.0")
    // 项目原有Compose、AndroidX依赖无需修改
}
  • 配置完成后点击「Sync Now」同步项目。

3. Firebase控制台开启Google登录提供商

  • 进入Firebase项目控制台,左侧菜单选择「Authentication」-「Sign-in method」
  • 在登录提供商列表中找到「Google」,进入配置页打开启用开关,选择项目支持邮箱后保存即可,Firebase会自动完成和Google身份服务的关联,无需手动跳转Google Cloud控制台配置OAuth信息
  • 配置页下滑找到「Web SDK配置」,复制其中的Web客户端ID,后续代码中需要使用

4. 项目清单权限配置

打开AndroidManifest.xml,在<application>标签上方添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

5. 端侧代码实现

5.1 登录页Activity逻辑

在承载登录页的Activity中初始化认证实例、注册Google登录结果回调:

class LoginActivity : ComponentActivity() {
    // 初始化Firebase认证实例
    private val auth = FirebaseAuth.getInstance()
    // 注册Google登录结果 launcher,替代旧版onActivityResult
    private val googleSignInLauncher = registerForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == RESULT_OK) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
            try {
                val account = task.getResult(ApiException::class.java)
                // 拿到Google账号ID Token后,提交给Firebase完成认证
                firebaseAuthWithGoogle(account.idToken!!)
            } catch (e: ApiException) {
                Toast.makeText(this, "Google登录失败: ${e.message}", Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 配置Google登录参数
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            // 这里替换成之前从Firebase控制台复制的Web客户端ID,不要填Android客户端ID
            .requestIdToken("替换为你的Web客户端ID")
            .requestEmail()
            .build()
        val googleSignInClient = GoogleSignIn.getClient(this, gso)

        setContent {
            YourAppTheme {
                LoginScreen(
                    onGoogleSignInClick = {
                        // 点击按钮时拉起Google账号选择页
                        val signInIntent = googleSignInClient.signInIntent
                        googleSignInLauncher.launch(signInIntent)
                    }
                )
            }
        }
    }

    // 提交Google凭证到Firebase完成注册/登录
    private fun firebaseAuthWithGoogle(idToken: String) {
        val credential = GoogleAuthProvider.getCredential(idToken, null)
        auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // 认证成功,获取用户信息后跳转主页
                    val currentUser = auth.currentUser
                    startActivity(Intent(this, HomeActivity::class.java))
                    finish()
                } else {
                    Toast.makeText(this, "Firebase认证失败", Toast.LENGTH_SHORT).show()
                }
            }
    }
}

5.2 Jetpack Compose登录页面实现

编写纯Compose实现的登录页,仅保留触发登录的按钮即可:

@Composable
fun LoginScreen(
    onGoogleSignInClick: () -> Unit
) {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(horizontal = 24.dp),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(
            onClick = onGoogleSignInClick,
            modifier = Modifier.fillMaxWidth()
        ) {
            Text(text = "使用Google账号注册登录")
        }
    }
}

常见问题排查

  • 认证失败提示invalid-credential:检查requestIdToken传入的是否为Web客户端ID,误填Android客户端ID是最高发的问题
  • 正式发布包登录失败:将发布签名的SHA-1、SHA-256指纹添加到Firebase项目设置-Android应用配置的指纹列表中
  • 模拟器上无法拉起Google登录:换用自带Google Play服务的官方模拟器镜像,第三方精简镜像通常缺少Google服务框架
  • 不需要手动配置Google Cloud的OAuth同意屏幕,Firebase开启Google登录时会自动创建可用的OAuth凭证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:57:17