【问题标题】:firebase - get all chat rooms for a memberfirebase - 获取成员的所有聊天室
【发布时间】:2016-09-11 09:37:58
【问题描述】:

我在我的应用程序中集成了多房间聊天,但我一直无法获取特定用户所属的所有聊天室的列表。

结构如下:

房间和成员是使用 childByAutoId 创建的,如下所示:

FIRUser *user = [FIRAuth auth].currentUser;  
mdata[@"uid"] = user.uid;

roomKey = [[_rootRef child:@"messages"] childByAutoId].key;

NSString *memberID = [[[_rootRef child:@"members"] child: roomKey ] child: user.uid ].key;

// set Meta data for member to be able to recognize later

[[[[_rootRef child:@"members"] child: roomKey ] child: memberID ] setValue:mdata];

现在我正在尝试为这样的(硬编码)用户获取房间列表:

-(void) getRoomKeys {

    [[[[_rootRef child: @"members"] queryOrderedByChild:@"uid" ] queryEqualToValue:@"QLfRoGpoCjWpzira7fljBj8g3EJ3"]
     observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
         NSDictionary<NSString *, NSString *> *message = snapshot.value;
     }];
  }

这会返回 0 个键/值对。

当我取出查询时,我得到了所有房间钥匙。当我将结构更改为此

我将为该用户获取所有房间,但使用这种结构,我无法将其他成员添加到该房间。所以我需要更深入地挖掘一个层次。

那么如何设置对childByAutoId创建的节点的查询呢?

感谢您的帮助!

【问题讨论】:

  • 弗兰克,我刚刚注意到您编辑了一些内容,但无法发现您的编辑。你能指出吗?谢谢!

标签: ios objective-c firebase firebase-realtime-database


【解决方案1】:

尝试考虑这种数据结构。

{
    "rooms": {
        "-KQgDxLIt88yPt6nacDu": { ... }
    },
    "members": {
        "QLfRoGpoCjWpzira7fljBj8g3EJ3": { ... }
    },
    "member-rooms": {
        "QLfRoGpoCjWpzira7fljBj8g3EJ3": {
            "-KQgDxLIt88yPt6nacDu": true
        }
    }
}

您可以通过观察member-rooms/{uid}来检索成员所在房间的密钥:

[[_rootRef child: @"member-rooms/QLfRoGpoCjWpzira7fljBj8g3EJ3"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
     NSLog("%@", snapshot.value); // the keys of the rooms of the member
}];

【讨论】:

  • Callam,感谢您为我指明了正确的方向。我听从了你的建议,效果很好,所以我投了赞成票。尽管如此,这实际上并不是我的问题“如何为 childByAutoId 创建的节点设置查询?”的答案,所以我犹豫是否接受这个答案。
  • 你想做什么?获取成员所在房间的列表?还是获取特定房间的成员?
  • 我想获取成员所在的所有房间的列表。这就是您的方法所做的,但您正在更改数据库的结构以实现此目的。在进一步开发具有不断变化的需求和松散向后兼容性的应用程序时,我害怕再次遇到这种情况。所以我想知道为什么 'queryEqualToValue:' 不查看所有孩子,而是在第一个孩子处停止。
猜你喜欢
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2021-06-05
  • 2018-03-08
相关资源
最近更新 更多