【问题标题】:How to only show friend's posts? Swift / Firebase如何只显示朋友的帖子?斯威夫特/火力基地
【发布时间】:2016-07-16 04:08:19
【问题描述】:

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

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

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 作为孩子的帖子。

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

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

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

        self.collectionView.reloadData()

    })

我的一些数据结构是:

users
     3093098409384
        friends
            29834098209 : true

posts
     099390234
         userWhoPosted: 29834098209

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

感谢任何指导。

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    看看这篇文章: 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
    }
    }
    }
    

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

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

    【讨论】:

    • 这篇文章太棒了!非常感谢您的参考:)
    猜你喜欢
    • 2018-11-02
    • 2022-01-21
    • 1970-01-01
    • 2017-04-15
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    相关资源
    最近更新 更多