我使用Facebook帐户登录并使用Facebook Graph
检索了我的Facebook好友。
在我的users
节点中,当我第一次登录时,我从Facebook登录的信息中创建了一个新的user
。
当您获得使用该应用的朋友列表时,您会看到Facebook ID
的列表。为了从facebook ID
中找到用户信息,我添加了一个节点facebookUser
,我只是将facebook ID
列表作为键存储,只有一个值,{{1}用户在Firebase上。
首先?我这样做是对的吗?
假设我是,我该如何从节点UID
获取与我的facebookUser
列表匹配的子项列表?
我还没有看到这样做的方法。我是否必须浏览我的Facebook ID
列表并为每个孩子创建一个参考,然后获取值(Facebook ID
)?它对我来说似乎不对。
编辑:
所以这是我在数据库中uid
的JSON:
users
我将使用facebook帐户登录的每个用户链接到 "users" : {
"0qNPzoQysdsdsdsdycuV1rxGvQkx2" : {
"defaultLanguage" : "en",
"email" : "sds_tmwrhwh_asd@tfbnw.net",
"gamesPlayed" : 0,
"isAnonymous" : false,
"level" : 1,
"name" : "sds asd",
"profileImageURL" : "https://scontent.xx.fbcdn.net/v/t1.0-1/s100x100/1371212901_469201257_n.jpg?oh=625e9f1212117c74c862a46eb&oe=5811212697",
"providerUserID" : "10112121250247",
"score" : 0
}
}
节点,如下所示:
facebookUsers
对于代码,这是我到目前为止所做的。我得到了来自Facebook图形请求的"facebookUsers" : {
"10112121250247" : {
"userID" : "0qNPzoQysdsdsdsdycuV1rxGvQkx2"
}
}
数组,循环遍历它们并获得facebook ID
节点的相应UID
。
facebookUsers
对于检索到的每个private func getUIDs(fromIDs IDs: [String]) {
for ID in IDs {
let ref: FIRDatabaseReference = FIRDatabase.database().reference(withPath: "facebookUsers/\(ID)/userID")
ref.observeSingleEvent(of: .value, with: { snapshot in
if let uid = snapshot.value as? String {
self.getUser(forFacebookID: ID, andUID: uid)
}
})
}
}
,我得到UID
节点,如下所示:
user
这有效,但我怀疑它是最好的解决方案。
其他:通过这样做,我得到了很多小的异步调用,以便跟踪所有调用的完成时间,我检查private func getUser(forFacebookID facebookID: String, andUID uid: String) {
let ref: FIRDatabaseReference = FIRDatabase.database().reference(withPath: "users/\(uid)")
ref.observeSingleEvent(of: .value, with: { snapshot in
let user = User(snapshot: snapshot)
self.facebookIdUidDic[facebookID] = user
})
}
的大小并将其与我的{{1}的大小进行比较数组。但是,再一次,感觉不对。