2016-07-16 4 views
1

Я только что внедрил систему добавления друзей, и я почесываю голову, только чтобы пользователи могли видеть сообщения друзей.Как показывать только сообщения друга? Swift/Firebase

На моем главном экране, где я отображаются сообщения, я получил:

DataService.ds.REF_USERS.child(currentUser!).child("friends").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 

      for snapshots in snapshot.children.allObjects { 
       let snap = snapshots as! FIRDataSnapshot 
       var frand = String(snap.key) 
       self.friendsArray.append(frand) 
      } 

, который тянет назад UID всех своих друзей.

Затем я хочу найти все сообщения, у которых есть UID в детстве.

Я подумал, может быть, я мог бы сделать for-loop через friendArray с равным запросом ...? но тогда я не знаю, как осуществить это с моим существующим в настоящее время запроса, который показывает назад сообщения, что я хотел увидеть:

DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").queryStartingAtValue(cutoff).observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in 

-bunch коды, который устанавливает свой пост и добавляет его в массив -

 self.collectionView.reloadData() 

    }) 

Некоторые из моей структуры данных:

users 
    3093098409384 
     friends 
      29834098209 : true 

posts 
    099390234 
     userWhoPosted: 29834098209 

Так что я потянув друзей из users-> Друзья -> UID немного, но как я потом вернусь Столбы этими пользователями, и THEN carr Я из моего обычного запроса вернулся?

Любые рекомендации приветствуются.

ответ

4

Посмотрите на эту статью: https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html?m=1

В основном вам нужно «разветвление» ваши данные, это означает, что тиражирование «пост» объектные данные в нескольких местах, чтобы облегчить доступ. i.e: создать режим «временной шкалы» и под этим uid каждого пользователя и под этими сообщениями от подписчиков этого пользователя.

Timeline: { 
<user_uid>: { 
<post_id>: { 
// your post data 
} 
} 
} 

Вы что, имея каждый раз, когда пользователь отправляет новое сообщение, отправить этот пост на временную шкалу каждого из его последователей.

Это может показаться странным, но Firebase имеет концепцию, в которой вы должны дублировать данные много раз, чтобы упростить доступ.

+0

эта статья просто БОЛЬШОЕ! большое спасибо за ссылку :) – mohnage7

Смежные вопросы