【问题标题】:Acces and notify on data change firebase IOS访问并通知数据更改 firebase IOS
【发布时间】:2017-07-22 06:31:26
【问题描述】:

我想通知在同一“房间”中的用户进行更改。场景:我有一个匿名设备,其 ID 和名称一起保存。我有一个具有唯一 ID 和名称的房间。我根据设备 ID 和房间 ID 建立了它们之间的链接。

看起来像这样:

应通知在同一密钥下链接的设备室“表”中的每个设备。当该键下的数据发生变化时。但现在我没有得到的部分。

我想在设备房间键下获取每个设备的设备名称。是的,当名称更改时,我也想获得更新。我怎样才能通过授权等来做到这一点?

我现在有这个基本代码可以将所有这些数据写入数据库:

var ref: DatabaseReference! = Database.database().reference()
     ref.child("devices").child(user!.uid).child("device_name").setValue("iPhone test")

let newRef = ref.child("rooms").childByAutoId()
newRef.child("name").setValue("Room test")                                   
                            ref.child("devicesrooms").child(newRef.key).child(user!.uid).setValue(true)

let ev = ref.child("devicesrooms").child(newRef.key)

ev.observeSingleEvent(of: .childAdded, with: { (DataSnapshot) in
    print("changed")
})

【问题讨论】:

    标签: ios firebase firebase-realtime-database


    【解决方案1】:

    如果您想知道名称何时更改,您需要使用 observe 而不是 observeSingleEvent

    我认为你需要这样的东西:

    var deviceNames = [String: String]()
    var deviceHandles = [String: UInt]()
    
    // Listen for added devices
    ev.observe(.childAdded, with: { (snapshot) -> Void in
        // Retrieve device key
        let deviceKey = snapshot.key
    
        // Add observer on device
        var handle: UInt = 0
    
        handle = ref.child("devices").child(deviceKey).observe(.value, with: { (snapshot) in
            let value = snapshot.value as? NSDictionary
            let deviceName = value?["device_name"] as? String ?? ""
    
            // Update or Add deviceName and handle in your dictionary
            deviceNames[deviceKey] = deviceName
            deviceHandles[deviceKey] = handle
        })
    })
    
    // Listen for removed devices
    ev.observe(.childRemoved, with: { (snapshot) -> Void in
        let deviceKey = snapshot.key
    
        // Remove deviceName from your dictionary
        deviceNames[deviceKey] = nil
    
        // Retrieve handle from your dictionary
        if let handle = deviceHandles[deviceKey] {
            // Remove observer on device
            ref.child("devices").child(deviceKey).removeObserverWithHandle(handle)
        }
    
        // Remove handle from your dictionary
        deviceHandles[deviceKey] = nil
    })
    

    这里是Firebase Realtime Database documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多