Compose MultiPlatform中Firebase Auth无法使用的解决方案咨询
在Compose MultiPlatform中搞定Firebase Auth的正确姿势
1. 先把依赖配置弄对
你之前的依赖配置有问题——dev.gitlive的Firebase库是拆分成通用层和平台层的,不能直接在commonMain加单一的firebase-auth依赖,得按下面这么改:
首先在lib.versions.toml里统一版本并拆分依赖:
[versions] firebase = "1.12.0" # 换成最新的稳定版即可 [libraries] firebase-auth-common = { group = "dev.gitlive", name = "firebase-auth-common", version.ref = "firebase" } firebase-auth-android = { group = "dev.gitlive", name = "firebase-auth-android", version.ref = "firebase" } firebase-auth-ios = { group = "dev.gitlive", name = "firebase-auth-ios", version.ref = "firebase" }
然后在模块级的build.gradle.kts里给不同sourceSet加对应的依赖:
sourceSets { val commonMain by getting { dependencies { implementation(libs.firebase.auth.common) } } val androidMain by getting { dependencies { implementation(libs.firebase.auth.android) } } val iosMain by getting { dependencies { implementation(libs.firebase.auth.ios) } } }
2. 给各平台做Firebase初始化
Firebase必须在每个平台上单独初始化,用KMP的expect/actual来实现跨平台调用:
通用层(commonMain)
先定义一个期望的初始化函数:
expect fun initializeFirebase()
Android端(androidMain)
实现这个初始化函数,还要记得配置google-services.json和Google服务插件:
import dev.gitlive.firebase.Firebase import androidx.compose.ui.platform.LocalContext actual fun initializeFirebase() { Firebase.initialize(LocalContext.current) }
同时在Android模块的build.gradle.kts里加上Google服务插件:
plugins { id("com.android.application") id("com.google.gms.google-services") // 这个必须加 }
最后把下载好的google-services.json放到src/main/目录下。
iOS端(iosMain)
同样实现初始化函数,还要把GoogleService-Info.plist加到Xcode项目里:
import dev.gitlive.firebase.FirebaseApp actual fun initializeFirebase() { FirebaseApp.configure() }
注意GoogleService-Info.plist要设置成"Copy if needed",不然打包的时候会找不到。
3. 在通用代码里用Firebase Auth
现在你可以在commonMain里直接用GitLive封装的通用API了,不用管平台差异:
import dev.gitlive.firebase.auth.auth import dev.gitlive.firebase.auth.FirebaseAuth // 获取Auth实例 val auth: FirebaseAuth = Firebase.auth // 举个例子:邮箱密码登录 suspend fun signIn(email: String, password: String) { auth.signInWithEmailAndPassword(email, password) }
踩坑排查
- commonMain同步失败:大概率是没拆分依赖,用了单一的
firebase-auth而不是firebase-auth-common,检查版本是否统一。 - 导不出FirebaseAuth:别导Android专属的
com.google.firebase.auth.FirebaseAuth,要导dev.gitlive.firebase.auth.FirebaseAuth,这才是通用层的类。 - 初始化报错:检查各平台的配置文件有没有放对,插件和依赖是不是都加全了。
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

