ios - 快速显示所有 firebase 用户的帖子

标签 ios swift firebase firebase-realtime-database

我需要使用 firebase 作为后端创建一个 UISearchController。我目前在 firebase 中有两个用户。一个用户发布了一个帖子,另一个用户发布了四个帖子。我希望能够在我的数据库中搜索所有书籍的标题(有五本书)。但是,目前我只能搜索当前登录用户上传的图书。下面是我的数据库的截图以及我的代码当前的截图。

Here is a screenshot of what my database looks like

databaseRef.child("posts").child(userID!).observe(.childAdded, with: { (snapshot) in


    let key = snapshot.key
    let snapshot = snapshot.value as? NSDictionary
    snapshot?.setValue(key, forKey: "uid")

    if(key == self.loggedUser?.uid)
    {
        print("same as logged in user")
    }
    else
    {
    self.usersArray.append(snapshot)
         self.followUsersTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
    }



    }) { (error) in
        print(error.localizedDescription)
    }

}

最佳答案

您将需要一个名为 Books 的不同父节点:-

现在你的 JSON 是这样的:-

posts : {
    userID1 : {
       BOOK_11_ID : {.....}
       };

    userID2 : {
       BOOK_21_ID : {.....},
       BOOK_22_ID : {.....},
       BOOK_23_ID : {.....},
       BOOK_24_ID : {.....},
       }
 }

您必须将数据库 JSON 结构修改为:-

 posts : {

   Users_books :{
    userID1 : {
       BOOK_11 : true  // Value 'true' means that this user 
                      // has subscribed or bought this book or whatever
       };

    userID2 : {
       BOOK_21 : true,
       BOOK_22 : true,
       BOOK_23 : true,
       BOOK_24 : true,
       }
      },

   Books:{
       BOOK_11_ID : {/Book details/};
       BOOK_21_ID : {/Book details/};
       BOOK_22_ID : {/Book details/};
       BOOK_23_ID : {/Book details/};
       BOOK_24_ID : {/Book details/};
       }

 }

修改“书籍”部分的安全规则,使其对所有经过身份验证的用户可见。

{
 "rules" :{

  "Users_books" : {

     ".write" : "auth != null && auth.uid === $uid",  // Will allow only the user to make any change within its node and no-one else
     ".read": "auth != null && auth.uid === $uid"

       },
  "Books" : {
      ".write" : "auth != null",  // Will allow all the users that are authenticated to your app to access every books detail.
      ".read" : "auth != null"
       }
     } 
  }

现在你要做的是:-

1) 如果是创建图书的用户;然后将图书详细信息存储在图书 uid 下的父节点 'Books' 中,并在用户节点中将 book_ID 的值设置为 true。

2) 如果数据库都是后端,即你输入它;每当用户订阅或购买一本书时,只需获取该书的 uid 并在该用户的部分将其设置为 true。

PS:始终扇出您的数据库;从中搜索起来要容易得多。尽管我很确定您会想在不久的将来存储用户的一些个人详细信息,因此只需创建另一个节点即可。将其命名为 'Users',安全规则将与 'Users_books' 相同,并且在 'Users' 父节点下附加每个用户的详细信息他们的 uid 作为他们的 key 。

关于ios - 快速显示所有 firebase 用户的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730959/

相关文章:

ios - 无法将类型 '[AnyObject]' 的值转换为预期的参数类型 '[MKAnnotation]' 错误

swift - .indexOn : unique uid in iOS/Swift 的 Firebase 安全规则

java - 如何处理fcm通知数据而不需要点击android中的通知弹出窗口

objective-c - 使用字符串而不是对象调用工厂方法

ios - AFNetworking 2 - 请求失败时没有响应正文

arrays - 在 Swift 中从数组数组中删除较小的值集

ios - popViewController 抛出 "deallocated while key value observers were still registered"错误

Android - 从 Firebase 检索数据

android - 强制门户出现需要什么响应?

ios - Xcode 工具栏中未显示视觉内存泄漏选项