Я довольно новичок в firebase, поэтому мой недостаток кода - это не просто попытка просто попробовать «Я действительно не знаю, с чего начать».Firebase запрос только для возврата новых сообщений?
Я стараюсь показывать только сообщения, которые находятся в течение 10 минут «старые» или менее. Я собираюсь запустить таймер в своем приложении, чтобы отправлять запрос каждую секунду (при условии, что это не вызывает слишком много проблемы?), Чтобы проверить, не текущие сообщения не превышают отметку в 10 минут, и если они, запрос просто не должен их возвращать.
У меня он настроен там, где когда пользователь делает сообщение, создается временная метка.
Установка является:
Posts
02983094jfksdflkaj3l
timestamp: 23478923019
Я предполагаю, что мне нужно orderByValue? сортировать сообщения по метке времени, а затем возвращать ее с некоторым пределом, но я не уверен, как отобразить все это.
Точка в правильном направлении была бы принята с пониманием.
Заранее благодарен!
Редактировать: Я больше не получаю сообщений, появляющихся в коллекции ... и независимо от того, сколько сообщений у меня есть, которые должны удовлетворять запросам менее 10 минут, возвращается только один.
Как я покажу ниже, я не получаю возврат .value на привязку ..., который должен вернуть значение временной метки, которое я покажу в привязке timestamp, нет?
override func viewWillAppear(animated: Bool) {
let cutoff = UInt64(1000 * floor(NSDate().timeIntervalSince1970) - 10*60*1000);
let cutoffFloat = Float(cutoff) // <-- woudnlt take a UInt64 as an AnyObject. I assume its ok to just do this?
DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").queryStartingAtValue(cutoffFloat).observeSingleEventOfType(.ChildAdded) { (snapshot: FIRDataSnapshot) in
print("child added") // <------- isn't ever getting called
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print("timestamp snap: \(snap)") // <---- returns timestamp snap: Snap (timestamp) 23904819242
if let postDict = snap.value as? Dictionary<String, AnyObject> {
print(snap.value)// <----- Returns nothing
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
self.collectionView.reloadData()
}
Я не знаю, если это любая помощь, но здесь был мой код, который я использовал до того, чтобы заполнить представление коллекции:
DataService.ds.REF_POSTS.observeEventType(.Value) { (snapshot: FIRDataSnapshot) in
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print(snap)
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
print("got here")
self.collectionView.reloadData()
}
Таймер, вероятно, не нужен, и вы можете подумать о ситуации, когда за последние 10 минут было 1024 сообщения. Сколько из этих сообщений должно быть доставлено вашему клиенту (-ам)? Я предполагаю, что, хотя вы можете быть заинтересованы во всех из них, вы действительно хотите просмотреть только 20 за один раз (например) или, может быть, только самые последние 20. И помните Firebase как асинхронный - добавив наблюдателя к узлу вашего приложения будет автоматически уведомляться о новых сообщениях - так что он будет * всегда * показывать последние сообщения. Опрос часто может быть полностью устранен, позволяя Firebase выполнять работу. – Jay
@Jay 9 сообщений будут отображаться только пользователю одновременно от группы друзей, а 10-минутный бит имеет важное значение для функции, которую я пытаюсь реализовать. Это нормально, если нет сообщений, показывающих, что точкой приложения является взаимодействие с сообщением с ограниченным количеством «времени показа». Если я просто вытаскиваю сообщения пользователя с лимитом в 9, то не должно быть проблем с потоком информации или чего-либо еще? Я также просто предполагаю, что это лучший способ сделать это. Видите ли вы что-то нелепое, когда идете по этому пути? – Noowoo