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
相关产品推荐
相关产品推荐

