【问题标题】:Is there a way to use Firebase (Authentication) with Kotlin Multiplatform?有没有办法在 Kotlin Multiplatform 中使用 Firebase(身份验证)?
【发布时间】:2020-04-24 15:16:47
【问题描述】:

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

我最初以为我可以简单地创建一个

expect class FirebaseAuth

//AndroidMain
actual class FirebaseAuth

//iOSMain
actual class FirebaseAuth

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

【问题讨论】:

标签: firebase kotlin firebase-authentication kotlin-multiplatform


【解决方案1】:

从现在开始,有一个关于 Kotlin Multiplatform firebase 产品的新官方库。支持的平台是 Android、iOS 和 JavaScript。

https://firebaseopensource.com/projects/gitliveapp/firebase-kotlin-sdk/

【讨论】:

  • 这是由 Firebase 团队正式监督的吗?
  • 不是。它只是在firebase网站上列出。也就是说,这是目前最好的选择。
【解决方案2】:

注意:这是一个旧答案。查看 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 互操作的非常基础):(
  • 我一直在寻找几个小时,我觉得自己很愚蠢,以至于我什么都不懂:(我不完全理解你是如何正确设置你的火库的(特别是你有所有这些火库的地方)框架)。:(关于如何开始的任何提示?我真的很抱歉。:(
  • 嘿,对不起,我错过了这些。对于那些 cinterop 配置文件,我从常规 Xcode 项目中获取了实际的 .framework 文件并将它们复制过来。但是,如果您只使用几种方法,您应该只制作接口并使用本机代码实现它们。在上面那个视频的结尾,这就是我们使用 Firebase Analytics 而不是 cinterop 所做的。真的很痛苦,所以我只在真正需要时使用它。
  • 我现在开始了解它是如何工作的。我一直在阅读有关 Kotlin/Native 的文章,试图更清楚地理解事物。我想我还停留在表面上,所以我正在考虑实际动手尝试一下 Kotlin/Native 与 C 以及它们如何互操作(我的 C 背景非常有限,并且不太了解,我喜欢它)是完全理解 Kotlin Multiplatform 的一大障碍,所以我想体验一下用 Kotlin/Native 做 C 的体验,就像我用 Java 学习 Kotlin/JVM 的方式一样)。我不知道这是否是个好主意。
  • 问题是我不太了解compilerOptslinkerOptscinteropt 中的内容。我希望通过弄脏我的手(希望如此),我能更好地理解它(以及为什么需要它或它的用途)。我感到很尴尬,因为我不太了解这些东西,但我对我可能发现的东西感到非常兴奋。希望我能有那个“啊哈!”很快。
【解决方案3】:

我正在为 Kotlin 多平台构建和发布 Firebase 包装器!

请记住,只有 JS、JVM 和 iOS 之间的通用 API 可用。

这里是:https://github.com/lamba92/firebase-multiplatform

【讨论】:

  • 看起来还处于早期阶段?会调查一下,一旦稳定,那就太好了。
  • 好吧,Android 包装器工作得很好,我正在使用它们。 JS 的有一点问题,我需要帮助来测试它们。 iOS 应该可以工作,因为 ObjC 不是像 JS 那样蹩脚的语言,而且一切都是静态类型的,所以应该几乎没有错误。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 2023-03-02
  • 2018-06-18
  • 2020-12-05
  • 1970-01-01
  • 2021-12-08
  • 2022-11-03
相关资源
最近更新 更多