2017-06-01 112 views
0

我想從Facebook檢索用戶的數據和存儲在firebase特定的數據並顯示它UILabelFacebook的SDK和火力地堡

請提供任何有用的鏈接,如果有任何。

我的代碼:

fileprivate func setupFacebookButton() { 

     // add facebook button 
     let loginButton = FBSDKLoginButton() 

     loginButton.frame = CGRect(x: 24, y: 535, width: 165, height: 44) 
     loginButton.delegate = self 
     loginButton.readPermissions = ["email", "public_profile" , "user_birthday", "user_location"] 
     view.addSubview(loginButton) 
    } 

let accessToken = FBSDKAccessToken.current() 
guard let accessTokenString = accessToken?.tokenString else { return } 
let credentials = FacebookAuthProvider.credential(withAccessToken: accessTokenString) 
Auth.auth().signIn(with: credentials, completion: { (user, error) in 
    if error != nil { 
     print("Something went wrong with our FB user: ", error ?? "") 
     return 
    } 

    print("Successfully logged in with our user: ", user ?? "") 
}) 
let requestParameters = ["fields": "name, email, birthday, gender, location"] 


//location first_name, gender, age_range, user_birthday 
FBSDKGraphRequest(graphPath: "/me", parameters: requestParameters).start { (connection, result, err) in 
    if err != nil { 
      print("Failed to start graph request:", err ?? "") 
      return 
     } 
print(result ?? "") 
    } 

輸出

{ 
    birthday = "09/21/1987"; 
    email = "[email protected]"; 
    gender = male; 
    id = 1520497814669566; 
    location =  { 
     id = 106065422766757; 
     name = "User city, User Country"; 
    }; 
    name = "User Name"; 
} 
Successfully logged in with our user: <FIRUser: 0x6080000c87a0> 
+0

你試圖存儲Facebook的什麼信息?它是整個「結果」還是僅僅是某些數據? – eshirima

+0

@EmilDavid只有整個結果 –

回答

1

我不會做整個事情,你反而給你提示和指針。

從您的問題判斷,您似乎尚未安裝Firebase。在繼續閱讀之前,請繼續並按照these的步驟進行操作,並查看他們的示例以瞭解如何構建數據庫。

1.類創建

我封裝所有此數據到一個名爲Person類,如下所示。

struct Location 
{ 
    var id: Int = '' 
    var name: String = '' 
} 

class Person 
{ 
    var id: Int = 0 
    var name: String = '' 
    var email: String = '' 
    var gender: String = '' 
    var birthday: String = '' 
    var location: Location = Location() 

    init(id: Int, name: String, email: String, gender: String, birthday: String, location: Location) 
    { 
     self.id = id 
     self.name = name 
     self.email = email 
     self.gender = gender 
     self.birthday = birthday 
     self.location = location 
    } 

    // TODO: Finish implementing this 
    init(snapshot: FIRDataSnapshot) 
    { 
     // This will make it easier to creating objects once you retrieve data from Firebase 
    } 

    // TODO: Finish implementing this 
    var dictionary: [String:Any] 
    { 
     return 
     [ 
      // This will make it easier to create a dictionary out of your object 
     ] 
    } 
} 

this問題,看看他們如何實現他們的init(snapshot: FIRDataSnapshot)構造,並嘗試實施你的。重要的是你要看看他們的數據庫樹是如何首先看起來是合理的。

對於var dictionary部分,this答案肯定會幫助你實現你的。

2. Facebook的結果瞭解

就像大多數的API在那裏,Facebook的查詢返回JSON。 JSON只是一個鍵/值對,這意味着它們可以存儲爲字典。

我建議你先試着擺弄result來理解它。

要提取說用戶名,你要做let userName = result.valueForKey("name") as! String

小心鑄造。我將它轉換爲String,因爲從結果來看,它是String。對於id,您將轉換爲Int而不是

如果你看看location雖然,它包含在其中的另一個字典。我會讓你弄清楚如何從那裏提取信息。

3.火力地堡

希望的時候,你在這裏你熟悉火力地堡讀/寫。 正如您可能已經注意到的,爲了將數據保存到Firebase,您需要爲其提供一本字典。這是var dictionary變量發揮作用。閱讀關於this問題的答案和評論,瞭解如何使用它及其相關性。

4.總結

一旦你遵循了所有上述步驟,它的時間來拼湊在一起。從Facebook

    • 提取內容創建Person對象並將
    • object.dictionary進入火力地堡的寫入功能。
    • VOILA!注意你的數據庫填充;這是最重要的部分:)

    快樂編碼。乾杯隊友:)

  • +0

    非常感謝你! –

    +0

    @FaigHuseynov歡迎您。請接受答案,如果它幫助解決您的問題,並允許在SO – eshirima

    +0

    上關閉此問題,此方法適用於uisegmentcontrol?使用片段,我定義了性別(男性/女性) –