有100種不同的方式來做到這一點;這裏是在上述幾個
users
user_id_0
facebook_id: facebook:10207213459687665
name: Nicholas
user_id_1
facebook_id: facebook:12346578912345689
name: Frank
,你會詢問你想要的facebook_id,這將返回子節點(姓名,地址等)的節點和所有。所述user_id_x是火力地堡自動生成的節點名稱(保證是不同的)
ref.queryOrderedByChild("facebook_id").queryEqualToValue("facebook:12346578912345689")
.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
print(snapshot.value) //prints the facebook_id and Frank
})
另一種選擇是使用相同的數據結構,並觀察節點加載數據。請記住,facebook標識是節點的KEY,而不是值 - .value是鍵:值對。
let ref = Firebase(url:"https://<app-name>.firebaseio.com/users")
let thisUser = ref.childByAppendingPath("facebook:12346578912345689")
ref.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
//snapshot will contain all of the child nodes
let userName = snapshot.value.objectForKey("name")
self.facebookUserName.text = userName
})
如果你只關心用戶名,您可以通過使用Facebook ID作爲關鍵簡化結構和值將是用戶名:
users
fb_10207213459687665: Nicholas
fb_12346578912345689: Frank
,並與上述檢索觀察代碼,除非您再次使用.value屬性,如您在最初的問題中所述。
在這種情況下,.value屬性是一個字符串,因爲它是唯一的值(因爲您發佈的結構中沒有子節點,所以可能會導致問題,因爲它可能是一系列關鍵字:值對會崩潰)
查詢增加一些開銷,所以觀察的是更有效的。
來源
2016-02-28 13:37:03
Jay
您從Firebase獲取數據的方式並不那麼愚蠢。實際上,我現在要做的和你現在要做的用戶名相同。 我認爲你的問題不在於從firebase獲取用戶數據,而是你在用戶的Facebook賬號登錄時混淆了你的用戶的Facebook ID。 –
你的意思是爲用戶添加一個userID並通過他們的用戶ID檢索數據?我認爲應該有一個「更聰明」的方式來做到這一點。 –
將來,請複製並粘貼Firebase中的數據結構而不是圖片,這樣我們就不必重新鍵入它。 :-) – Jay