2017-06-01 76 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?使用片段,我定义了性别(男性/女性) –