我在项目中使用ServerValue时间戳,我想通过使用时间戳作为键来创建关系。
当" setValue"执行时间戳计算两次,我必须观察" .childAdded"和#34; .childChanged"获取正确的时间戳值。 (ಠ_ಠ) (https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRServerValue)
使用过的框架: Firebase(3.15.0), FirebaseAnalytics(3.7.0), FirebaseAuth(3.1.1), FirebaseCore(3.5.2), FirebaseDatabase(3.1.2), FirebaseInstanceID(1.0.9)
Swift中的示例代码段:
ref = FIRDatabase.database().reference()
ref.child("test").observe(.childAdded, with: { snapshot in
if let value = snapshot.value as? Int {
print("Child added, timestamp value: \(value) ")
}
})
ref.child("test").observe(.childChanged, with: { snapshot in
if let value = snapshot.value as? Int {
print("Child change, timestamp value: \(value) ")
}
})
ref.child("test").setValue(["one" : FIRServerValue.timestamp()]) { error, ref in
print("New child inserted.")
}
控制台输出:
如果setValue由其他用户(其他连接的客户端)执行,那么只有" childAdded"事件正在调用哪个很好:)
参考此评论https://stackoverflow.com/a/30244373/4427983,似乎时间戳首先由firebase框架在本地计算。我可以以某种方式禁用此功能并强制框架仅在服务器端计算时间戳值吗?