我想尝试使用Firebase Cloud Firestore来使用以下代码获取一些数据。
按下按钮应该获取一个布尔值,如果它满足某些条件,应用程序将导航到另一个视图控制器,它在第一次点击时工作正常但我注意到当我向后导航并按下相同的按钮时,没有结果将是再次获取!!
db.collection("users").document((Auth.auth().currentUser?.uid)!).getDocument { (snap, error) in
if error != nil {
print(error.debugDescription)
}
if snap != nil {
let isPosted = snap?.data()["isPosted"] as! Bool
let isStroe = snap?.data()["isStore"] as! Bool
if !isPosted && !isStroe {
print("first post")
let useraccountVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "newData") as! UINavigationController
self.present(useraccountVC, animated: true, completion: nil)
}else if isPosted && isStroe {
print("store")
let useraccountVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "newData") as! UINavigationController
self.present(useraccountVC, animated: true, completion: nil)
}else if !isPosted && isStroe{
print("store")
let useraccountVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "newData") as! UINavigationController
self.present(useraccountVC, animated: true, completion: nil)
}else{
print("cant post any more")
}
}
}
答案 0 :(得分:0)
此定价模型makes an explicit provision:
此外,如果监听器断开超过30分钟(例如,如果用户离线),则会向您收取读取费用,就好像您已发出全新查询一样。
这也适用于获取:如果您在30分钟内重复获取并且没有任何更改,则不收费。
这样做的方式是Firestore包含一个“恢复令牌”,其中包含自上次发出任何给定查询以来要求更改的查询。
您可以通过enabling debug logging验证客户端是否为您自己发送了简历令牌。当您多次进行查询时,您会在日志中看到类似于第一个以外的查询的内容:
Nov 1 16:44:36 Firestore_Example[8105] <Debug>: [Firebase/Firestore][I-FST000001] FSTWatchStream 0x6080002cbc20 watch: <GCFSListenRequest 0x6180002cc010>: {
database: "projects/my-project/databases/(default)"
add_target {
documents {
documents: "projects/my-project/databases/(default)/documents/test-collection/c1GK3eq7rakmRvIN4ehE"
}
resume_token: "\n\t\010\254\251\304\242\307\236\327\002"
target_id: 2
}
}
如果在重复查询时服务器上没有任何更改,您还可以观察到,尽管提出了第二个请求,但响应实际上并不会传输任何文档,它们只是表明客户是最新的。