Firebase在它的关键路径上观察对象逐个返回它的孩子

时间:2016-01-27 16:15:22

标签: ios firebase

我使用Firebase IOS SDK并设置安全性,让每条消息只能由其所有者读取/写入。要收听消息更改,我需要使用observeEventType:(FEventTypeChildChanged/FEventTypeChildAdded)观察消息的消息密钥路径。 我在这里面临的问题是,每次远程更新/添加邮件时,Firebase都会为邮件的每个子项(属性名称和邮件)返回一个单独的快照。快照字典只包含一个具有相应值的子项。有没有办法让所有孩子都返回完整的信息,而不是让他们一个一个地归还?

-messages
  --message_key_a
     --name
     --message
  --message_key_b
     --name
     --message
  --message_key_c
     --name
     --message

 --users
    --user_key_a
      --name
      --messages
          --message_key_a
          --message_key_c

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式收听value事件:

ref observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot)

但是如果每条消息只能由其所有者读取,则听起来您的数据模型错误。为什么不在每个所有者的节点下为该所有者存储消息:

/messages_per_user
    $uid
        $messageid
            name
            message

通过这种方式,您可以在/messages_per_user/$uid上提供读/写访问权限:

{
  "rules": {
    "messages_per_user": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}