目前我已经在 KMM 项目中为 Android 和 iOS 设置了 firebase。 我已经在两个项目上添加了 firebase sdk,以便本机部分来配置它们。
在共享方面,我正在使用
gitlive firebase sdk
库,我在其中对 firestore 数据库进行查询。所以查询数据的逻辑是SHARED
这是查询:
@OptIn(ExperimentalCoroutinesApi::class)
override fun invoke(): Flow<List<TicketUi>> = flow {
val list = Firebase.firestore
.collection("users")
.document(Firebase.auth.currentUser!!.uid)
.collection("receipts")
.snapshots
.mapLatest {
it.documents.map { doc ->
// Additional code converting the document to a Receipt
}
}
// Collect the flow and emit the list
list.collect { ticketUiList ->
emit(ticketUiList)
}
}.catch { error ->
Logger.e { "Error in GetAllTicketsUseCaseImpl.invoke(): ${error.cause} && message: ${error.message}" }
emit(emptyList<TicketUi>())
}
我已经设置了模拟器以便在两个平台上进行测试。
安卓 效果很好,一切都很好
iOS:
Auth
和 Firestore
。AppDelegate
我调用以下代码 FirebaseApp.configure()
// Firestore Configuration
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings
FirebaseConfiguration.shared.setLoggerLevel(.debug)
Auth.auth().useEmulator(withHost:"127.0.0.1", port:8081)
let auth = Auth.auth()
if auth.currentUser == nil {
// Sign in anonymously
auth.signInAnonymously { authResult, error in
if let error = error {
// Sign-in failed∂
print("signInAnonymously:failure \(error.localizedDescription)")
} else {
// Sign-in succeeded
print("signInAnonymously:success")
if let user = authResult?.user {
print("User: \(user.uid)")
}
}
}
} else {
// Already signed in
print("Already logged in: \(auth.currentUser?.uid ?? "No UID")")
}
酷。是时候从 firestore 查询该特定用户的数据了。显示以下错误:
错误域=FIRFirestoreErrorDomain代码=7“缺失或不足 权限。" UserInfo={NSLocalizedDescription=缺失或不足 权限。
11.1.0 - [FirebaseFirestore][I-FST000001] 监听 users/9hYte9W9Sf1FlH6vMJdnVs0qPNLd/receipts 的查询失败:权限缺失或不足。
这是 firestore 模拟器的规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
我不明白我可能会错过什么,这一定是 iOS 端出了问题,因为在 Android 上我可以毫无问题地监听查询并检索数据。
有什么我可能错过的吗?或者有一种方法可以获取更多关于到底哪里出了问题的数据?
找到根本原因了,看起来它来自kotlin gitlive-firebase库....删除这个.
Firebase.firestore.settings = firestoreSettings {
}
可能会在他们的 github 项目中询问为什么会发生这种情况。