如何只显示朋友的帖子?斯威夫特/火力基地

J.D*_*Doe 1 ios firebase swift firebase-realtime-database

我刚刚实现了一个朋友添加系统,我正在摸索如何只允许用户查看朋友的帖子。

在我显示帖子的主屏幕上,我有:

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)
            }
Run Code Online (Sandbox Code Playgroud)

这会拉回他们所有朋友的 UID。

然后我想搜索所有具有该 UID 的帖子。

我想也许我可以通过一个带有 equalTo 查询的friendsArray 做一个for循环......?但是我不确定如何使用我当前现有的查询来实现它,该查询显示了我想要查看的回帖:

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

- 一堆设置我的帖子并将其附加到数组的代码-

        self.collectionView.reloadData()

    })
Run Code Online (Sandbox Code Playgroud)

我的一些数据结构是:

users
     3093098409384
        friends
            29834098209 : true

posts
     099390234
         userWhoPosted: 29834098209
Run Code Online (Sandbox Code Playgroud)

所以我将朋友从用户-> 朋友-> UID 位中拉出来,但是我如何取回这些用户发布的帖子,然后执行我正在做的正常查询?

任何指导表示赞赏。

Gil*_*Gil 5

看看这篇文章:https : //firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html?m=1

基本上,您需要“扇出”您的数据,这意味着将“发布”对象数据复制到多个位置以使其更易于访问。即:创建一个“时间线”模式,在每个用户的 uid 下,在该用户的关注者的帖子下。

Timeline: {
<user_uid>: {
<post_id>: {
// your post data
}
}
}
Run Code Online (Sandbox Code Playgroud)

您可以通过让用户每次提交新帖子时将该帖子发送到他的每个关注者的时间线来做到这一点。

听起来可能很奇怪,但 Firebase 有一个概念,您应该多次复制数据以使其更易于访问。