swift - Firebase/Swift 两个数据库连接

标签 swift database firebase

我有一个应用程序,我想连接到两个不同的 firebase 数据库。 我有两个 viewController,它们可以单独连接到每个数据库,但是如果我连接到第一个数据库,然后连接到另一个数据库 - 应用程序崩溃

我有 2 个 info.plist 文件和 2 个通过按钮/segue 连接的 ViewController。

my files

这是我的第一个 View Controller

import UIKit
import Firebase
class ViewController: UIViewController {
var ref: DatabaseReference!
   var handle:UInt!


override func viewDidLoad() {
    super.viewDidLoad()
    let filePath = Bundle.main.path(forResource: "GoogleService-Info-anden", ofType: "plist")
    guard let fileopts = FirebaseOptions.init(contentsOfFile: filePath!)
        else { assert(false, "Couldn't load config file") }
    FirebaseApp.configure(options: fileopts)
    ref = Database.database().reference()
    ref?.child("UserVandreture").child("navn").setValue("Inger")
}

override func viewDidDisappear(_ animated: Bool) {
    ref.removeObserver(withHandle: handle)
}

}

我可以连接到 firebase - 这在我加载应用程序时发生。

第二个 View Controller

import UIKit
import Firebase

class AndenDBViewController: UIViewController {
var ref: DatabaseReference!
var handle:UInt!
let fileName = "Bambusstien"
override func viewDidLoad() {
    super.viewDidLoad()
    let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")
    guard let fileopts = FirebaseOptions.init(contentsOfFile: filePath!)
        else { assert(false, "Couldn't load config file") }
    FirebaseApp.configure(options: fileopts)
    ref = Database.database().reference()
    response()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
//kan læse navn,type, længde og link
func response() {
    ref?.child("Vandreture").child(fileName).observe(.value, with: { (snapshot) in
        let dict = snapshot.value as? [String: AnyObject]
        let navn = dict!["navn"] as? String
        print(navn as Any)

        let type = dict!["type"] as? String
        print(type as Any)

        let Længde = dict!["length"] as? String
        print(Længde as Any)

        let link = dict!["link"] as? String
        print(link as Any)
    })
   }
override func viewDidDisappear(_ animated: Bool) {
    ref.removeObserver(withHandle: handle)
    }


}

如果我在前面的 viewController 中注释掉数据库调用,则该 Controller 还能够连接到 firebase/数据库并读取数据,但如果我不注释掉此数据,它将在第一个数据库中设置值,当我按下按钮转到第二个 viewController 时,应用程序崩溃了。

我已将 2 个 plist 文件的 targetMemebeship 设置为相同的应用程序名称。 enter image description here

错误消息表明应用程序已经配置 - 但是我认为 ViewDidDissapear() 中的 ref.removeObserver(handle) 会在连接到其他数据库之前断开与数据库的连接 - 那么出了什么问题?

enter image description here

最佳答案

基本上我需要保护我的数据,但我还没有填充数据库,所以.. 我的问题的解决方案是使用规则部分 - 只有一个数据库。 允许用户对数据库的某些部分具有写访问权限,而仅对其他部分具有读访问权限 - 类似于:

{
"rules": {
"myPersonal":{
".read": true,
".write": "auth != null"

},
"myPublic": {
".read":  "auth != null",
".write": true

}

} }

关于swift - Firebase/Swift 两个数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631179/

相关文章:

ios - 如何将 NSData 转换为多种类型的 Ints

c# - SQL Server 插入/更新/删除和选择性能/死锁建议

javascript - React + Firebase 应用程序和 auth.esm.js 的网络错误 :255 while trying to sign in with Google

ios - 如何在 iOS 中使用共享表共享文件?

ios - firebase - 在多个位置原子删除

asp.net - 将 ASP.NET 数据集连接到数据库表

php - 使用 php 或数据库从文件夹中读取图像

javascript - @firebase/testing - 如何使用 auth.providerId 调用 `initializeTestApp`?

javascript - 我的注册详细信息没有保存到我的 firebase 数据库中

ios - Swift + Pubnub 聊天应用程序加载旧消息以进行滚动