有没有一种方法可以在Kotlin Multiplatform中使用Firebase(身份验证)?

15

我有一个使用Firebase Authentication的Android项目。它运行良好,我想使用Kotlin Multiplatform的代码共享将同一项目移植到iOS应用中。

最初,我认为只需简单地创建

expect class FirebaseAuth

//AndroidMain
actual class FirebaseAuth

//iOSMain
actual class FirebaseAuth

但我真的不知道如何在iOSMain中使用FirebaseAuth的iOS版本?有人可以指导我一下吗?


对于任何正在进行研究的人,我在这里找到了这篇文章:https://medium.com/swlh/kotlin-multiplatform-ios-frameworks-dependencies-2320ca13ea30 - Archie G. Quiñones
3个回答

16

1
这是否由 Firebase 团队官方监督? - Daniele B
7
没错,它只是在Firebase网站上列出来了。话虽如此,目前它仍然是最好的选择。 - Kevin Galligan

6

注意: 这是一份旧答案。查看https://github.com/gitliveapp/firebase-kotlin-sdk/以获取一个相当维护的库。

我曾就KMP库进行过一次演讲,并专门构建了一个Firestore包装器。

https://github.com/touchlab/FirestoreKMP

https://vimeo.com/371460823

在该库中,我创建了扩展功能来实现特定功能。你的问题有点广泛,但我可能会从以下开始:

//common
expect fun FirebaseAuth.signIn(email:String, password:String):Task<AuthDataResult>

//ios main
actual fun FirebaseAuth.signIn(email:String, password:String):Task<AuthDataResult> = signInWithEmail(email, password) //Figure out async return value

异步返回的东西可能有些棘手,但是 Firestore 代码将提供示例。以下是一个示例:

https://github.com/touchlab/FirestoreKMP/blob/master/firestore/src/commonMain/kotlin/co/touchlab/firebase/firestore/Query.kt#L17


如果我理解正确的话,我需要使用cinterop才能使其工作,对吗?我不知道如何正确地做,而且我真的很困惑该怎么做。我甚至不知道从哪里开始(c interop的非常基础的部分):( - Archie G. Quiñones
1
我已经搜索了几个小时,感觉自己太蠢了,什么都不懂 :( 我不完全理解如何正确设置您的firestore(特别是您从哪里获取所有这些firebase框架)。 :( 有什么建议可以帮助我入门吗?非常抱歉。 :( - Archie G. Quiñones
1
嘿,抱歉我错过了这些。对于那些cinterop配置,我从常规的Xcode项目中获取了实际的.framework文件并将它们复制过来。但是,如果你只使用了一些方法,你应该只需创建接口并使用本地代码实现它们。在上面的视频末尾,我们使用Firebase Analytics而不是cinterop来实现这一点。这真的很痛苦,所以我只在真正需要时才使用它。 - Kevin Galligan
我现在开始理解它是如何工作的。我一直在阅读关于Kotlin/Native的文章,试图更清楚地了解事物。我觉得我还停留在表面上,所以我想实际动手尝试用C和它们的交互来首先使用Kotlin/Native(我有非常有限的C背景,不太了解它,感觉这是了解Kotlin多平台的一个很大障碍,所以我想通过类似于我通过Java学习Kotlin/JVM的方式来使用C和Kotlin/Native)。不知道这是否是个好主意。 - Archie G. Quiñones
事实上,我并不真正理解cinteropt中存在的compilerOptslinkerOpts等内容。我希望通过亲身实践来更好地理解它(以及为什么需要它或它的作用)。我感到有些尴尬,因为我对这些东西并不了解,但同时也很兴奋,期待着可能会发现什么。希望我能很快拥有那个“啊哈!”的时刻。 - Archie G. Quiñones
还有一些更新,我认为我已经成功让整个东西运行了,但是IDE(在这种情况下是Android Studio)无法看到实际类型(它们都是红色的),所以我有点怀疑自己是否做对了。 - Archie G. Quiñones

3

1
看起来它还处于早期阶段?等稳定后我会研究一下,这将是非常棒的。 - Archie G. Quiñones
嗯,Android的包装器运行良好,我正在使用它们。JS的包装器有些错误,我需要帮助测试它们。iOS的应该可以工作,因为ObjC不像JS那样是一种糟糕的语言,而且所有内容都是静态类型的,所以几乎没有错误。 - Lamberto Basti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接