2017-07-21 3 views
2

同じ「部屋」にあるユーザに変更を通知します。シナリオ:私は名前で保存されたIDを持つ匿名のデバイスを持っています。私は一意のIDと名前の部屋を持っています。私はそれらの間にデバイスIDと部屋IDに基づいたリンクを持っています。データ変更の火災ベースでのアクセスと通知IOS

それは次のようになります。

enter image description here

同じキーの下にリンクされデバイスの部屋「テーブル」内のすべてのデバイスに通知しなければなりません。そのキーの下でデータが変更されたとき。しかし、今私が得ない部分。

私はデバイスルームのキーの下に各デバイスのデバイス名を取得したいと思います。そして、はい、名前が変わったときにもアップデートを取得したいと思います。承認などでこれを行うにはどうすればいいですか?

は、私は、データベースへのすべてのデータを書き込むために、今、この基本的なコードを持っている:あなたが名前は、あなたがとobserveSingleEventない を観察を使用する必要が変化したときに知りたい場合は

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") 
}) 

答えて

2

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

は、私はあなたがそのようなことが必要だと思います。

関連する問題