firebase - 获取会员的所有聊天室

时间:2016-09-11 09:37:59

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

我在我的应用中集成了多房间聊天功能,而且我很难获得特定用户所有聊天室的列表。

结构如下:

members structure

使用 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键/值对。

当我拿出查询时,我得到所有房间钥匙。当我将结构更改为此时 uid one level higher

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

尝试考虑这种数据结构。

mRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {

                GetCategories newPost = eventSnapshot.getValue(GetCategories.class);

                Log.e("NAME " ,""+ newPost.getName());   

            }

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

您可以通过观察{ "rooms": { "-KQgDxLIt88yPt6nacDu": { ... } }, "members": { "QLfRoGpoCjWpzira7fljBj8g3EJ3": { ... } }, "member-rooms": { "QLfRoGpoCjWpzira7fljBj8g3EJ3": { "-KQgDxLIt88yPt6nacDu": true } } }

来检索成员所属房间的钥匙
member-rooms/{uid}